标签: django-database

Django转储:模型不验证

当我尝试使用此指令在Django中转储模型的数据时:

python manage.py dumpdata app> temp_data.json
Run Code Online (Sandbox Code Playgroud)

它给出以下错误:

Error: One or more models did not validate:
asset.authpermission: "codename": CharField cannot have a "max_length" greater than 255 when using "unique=True".
asset.djangocontenttype: "app_label": CharField cannot have a "max_length" greater than 255 when using "unique=True".
asset.djangocontenttype: "model": CharField cannot have a "max_length" greater than 255 when using "unique=True".
Run Code Online (Sandbox Code Playgroud)

问题是这些表是由django自动生成的.另外,我刚刚检查了数据库(mysql),字段是varchar(100).

怎么了 ?

django dump django-models django-database

2
推荐指数
1
解决办法
1857
查看次数

Django:如何在事务中包装批量更新/插入操作?

这是我的用例:

  • 我有多个并行运行的芹菜任务
  • 每个任务都可以批量创建更新许多对象.为此,我正在使用django-bulk

所以基本上我使用了一个非常方便的函数insert_or_update_many:

  1. 它首先执行选择
  2. 如果找到对象则更新它们
  3. 否则它会创建它们

但这引入了并发问题.例如:如果在步骤1期间不存在对象,则将其添加到稍后要插入的对象列表中.但在此期间可能会发生另一个Celery任务创建该对象,并且当它尝试执行批量插入时(步骤3),我收到重复条目的错误.

我想我需要在'阻塞'块中包含3个步骤.我已经阅读了有关交易的内容,并且我试图将步骤1,2,3包含在一个with transaction.commit_on_success:块内

with transaction.commit_on_success():
    cursor.execute(sql, parameters)
    existing = set(cursor.fetchall())
    if not skip_update:
        # Find the objects that need to be updated
        update_objects = [o for (o, k) in object_keys if k in existing]
        _update_many(model, update_objects, keys=keys, using=using)
    # Find the objects that need to be inserted.
    insert_objects = [o for (o, k) in object_keys if k not in existing]
    # Filter out any …
Run Code Online (Sandbox Code Playgroud)

python sql django transactions django-database

2
推荐指数
1
解决办法
4429
查看次数

ForeignKey到Model字段?

我希望foreign key我的模型中的关系与表中的username字段User(存储user创建的django.contrib.auth.forms.UserCreationForm).

我的模型看起来如何:

class Blog(models.Model):
    username = models.CharField(max_length=200) // this should be a foreign key
    blog_title = models.CharField(max_length=200)
    blog_content = models.TextField()
Run Code Online (Sandbox Code Playgroud)

username字段应该是外键.外键应该在此字段中

python django django-models django-database django-users

2
推荐指数
2
解决办法
4515
查看次数

Django 中的多个数据库

我正在尝试使用 Django 创建一个问答网站,并且我想为所有应用程序使用多个数据库

  • 两个安全数据库,如admin、auth、forum
  • 其余部分的安全性较低(如 sqlite3)数据库

但我不想重新配置我的模型和应用程序。

我怎样才能做到这一点??

注意:论坛是实现问答网站的应用程序

django django-database python-3.x

2
推荐指数
1
解决办法
1724
查看次数

为什么Django不"真正"支持自动表更新?

最近我一直在努力学习Django中的web开发,我很高兴...

但是,有一点真的很烦人 - 特别是当你了解django背后的'简单'哲学时.

这是在django中更新表格真的远离我刚刚经历的简单性.

例如,就像我的真实案例一样,我在开头跳过为条目标题添加一个slug字段.但过了一段时间,我想在表格中添加一个slug列,就像每个人一样 - 这是django中的新手可能期望的,我试过python manage.py syncdb命令.当然它不起作用......经过一番搜索后我发现"我需要在dbshel​​l命令行中手动添加一个新列"(我使用的数据库是mysql).

我不知道为什么,但我认为这是一个非常有趣的事情,在我看到在django中创建一个简单的网站之后,我从未想到过.难道你们都不这么认为吗?或者,如果您有任何其他解决方案或任何其他问题,请与您分享?

提前致谢...

PS.我不介意在shell中与db相处,但我想知道的是为什么它在django中就像那样...

mysql django django-database

1
推荐指数
1
解决办法
985
查看次数

使用post_save而不是pre_save信号检测字段更改

当一个字段发生变化时,我需要做一些动作.

由于此操作需要使用已保存的对象,我不能使用这样的pre_save信号:

@receiver(pre_save, sender=reservation_models.Reservation)
def generate_possible_pairs(sender, instance, **kwargs):
    try:
        reservation_old = sender.objects.get(pk=instance.pk)
    except sender.DoesNotExist:
        pass # Object is new, so field hasn't technically changed, but you may want to do something else here.
    else:
        if not reservation_old.datetime == instance.datetime: # Field has changed
            do_something(instance) # It would be better to be sure instance has been saved
Run Code Online (Sandbox Code Playgroud)

是否有可能使用post_save信号?

我想避免为此模型添加临时属性.

python django django-signals django-models django-database

1
推荐指数
1
解决办法
2832
查看次数

如何将数据库中的现有表链接到 Django 模型?

我正在学习 Django,我需要知道我是否可以将数据库中已经存在的表链接到模型(因为我听说 Django 为我们在 django app 中创建的任何模型创建了表)。

如果是这样,怎么做?

django django-models django-database django-database-functions

1
推荐指数
1
解决办法
3173
查看次数

Django 配置不同的数据库

我有两个database兴趣,基本的和开发的:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| projectsdb         |
| projectsdb_dev     |
+--------------------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

在我的 django 文件中mysite/mysite/settings.py,我的数据库是这样声明的:

DATABASES = {  
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'projectsdb',
        'USER': 'projectsdb',
        'PASSWORD': 'notsecure',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}
Run Code Online (Sandbox Code Playgroud)

允许的主机是:

ALLOWED_HOSTS = ['xxx.xx.xxx.xx']  # I replaced it for the example
Run Code Online (Sandbox Code Playgroud)

我在用于开发的端口 8006 上启动服务器:

$ python ./manage.py runserver …
Run Code Online (Sandbox Code Playgroud)

django django-database django-settings django-mysql

1
推荐指数
1
解决办法
2836
查看次数

如何在 django 项目上实现关注系统

我正在开发一个 django 项目,并且想在其中实现一个跟随/跟随系统,目前我有一个朋友系统,顺便说一句,它根本不起作用,但我只想知道如何编写该代码,这个想法就是拥有一个像 instagram 一样的朋友系统。

模型.py 文件

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        profile_pic = models.ImageField(upload_to='profile_pics', null=True, blank=True, default='default.png')
        bio = models.CharField(max_length=400, default=1, null=True)

        def __str__(self):
            return f'{self.user.username} Profile'
Run Code Online (Sandbox Code Playgroud)

视图.py 文件

    def profile(request, username=None):
        profile, created=Profile.objects.get_or_create(user=request.user)
        if username:
            post_owner = get_object_or_404(User, username=username)
            user_posts = Profile.objects.filter(user_id=post_owner) 
        else:
            post_owner = request.user
            user_posts = Profile.objects.filter(user=request.user)

        args1 = {
            'post_owner': post_owner,
            'user_posts': user_posts,
        }
        return render(request, 'profile.html', args1)
Run Code Online (Sandbox Code Playgroud)

python django django-models django-views django-database

1
推荐指数
1
解决办法
1447
查看次数

将 Django 连接到 Sql 服务器 2019

我在 django 中创建了一个新项目,并尝试连接到 sql server 2019。

因此,我安装了 sql-server-2019,安装后,我检查 ODBC DRIvers 是否正常,如您所见,到目前为止一切正常。

在此输入图像描述

我做的下一件事是pip install django-pyodbc-azure

在此输入图像描述

我安装了更多软件包,因为我正在测试我发现的所有内容,到目前为止我总是遇到相同的错误。

在此输入图像描述

这意味着conn = Database.connect(connstr, django.db.utils.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] 未找到数据源名称且没有预定义驱动程序 (0) (SQLDriverConnect )已指定)

这是我来自 django 的 settings.py:

在此输入图像描述

我被困在这里,我什至不知道我能做什么

sql-server django django-database sql-server-2019

1
推荐指数
1
解决办法
1678
查看次数