标签: django-3.2

UUIDField 可以用作 Django 3.2.^ 中的 default_auto_field 吗?

我一直在 Django 中使用 UUIDField 作为主键。我的项目有一个带有继承字段的模型层次结构,在顶部,我有以下超类:

import uuid
from django.db import models

class HasIDMixin(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True, name='id')

Run Code Online (Sandbox Code Playgroud)

更新到 Django 3.2.4 后,我收到以下警告:

WARNINGS:
app_base.MyProject: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
    HINT: Configure the DEFAULT_AUTO_FIELD setting or the AppBaseConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.

Run Code Online (Sandbox Code Playgroud)

按照警告的建议,我尝试了 settings.py 中的 DEFAULT_AUTO_FIELD 和 app_config 中的 default_auto_field ,但出现以下错误:

ValueError: Primary key 'django.db.models.UUIDField' referred by DEFAULT_AUTO_FIELD must subclass AutoField.
Run Code Online (Sandbox Code Playgroud)

我看到其他人使用 UUIDField …

python django django-3.2

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

Django 3.2 异常:django.core.exceptions.ImproperlyConfigured

我正在升级到 django 3.2,但根据它的发行说明,它说:

现在在第一次访问时检查 SECRET_KEY 设置的有效值,而不是在第一次加载设置时。这允许运行不依赖于 SECRET_KEY 的管理命令,而无需提供值。因此,在不提供有效 SECRET_KEY 的情况下调用 configure(),然后继续访问 settings.SECRET_KEY 现在将引发 ImproperlyConfigured 异常。

错误: django.core.exceptions.ImproperlyConfigured: Cannot import 'users'. Check that 'apps.users.apps.UsersConfig.name' is correct.

用户应用程序.py:

from django.apps import AppConfig

class UsersConfig(AppConfig):
    name = 'users'
Run Code Online (Sandbox Code Playgroud)

我认为这个错误是因为它与 django==3.1.7 一起工作。有人可以帮我解决这个问题吗?如何检查我的密钥是否有效并在需要时生成新密钥?

python django django-3.2

8
推荐指数
4
解决办法
5149
查看次数

AttributeError:“_UnixSelectorEventLoop”对象没有属性“_signal_handlers”

我已经将 Django/Python 应用程序升级到 Python 3.9.7 和 Django 3.2.7(从 Python 3.5 和 Django 1.11.23)。

目前如果我尝试运行python manage.py createsuperuser

我收到以下错误

Traceback (most recent call last):
  File "/Users/myuser/.pyenv/versions/3.9.7/lib/python3.9/asyncio/selector_events.py", line 261, in _add_reader
    key = self._selector.get_key(fd)
  File "/Users/myuser/.pyenv/versions/3.9.7/lib/python3.9/selectors.py", line 193, in get_key
    raise KeyError("{!r} is not registered".format(fileobj)) from None
KeyError: '10 is not registered'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/myuser/Development/app/manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/myuser/.pyenv/versions/insta9/lib/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/Users/myuser/.pyenv/versions/insta9/lib/python3.9/site-packages/django/core/management/__init__.py", …
Run Code Online (Sandbox Code Playgroud)

python django eventlet python-3.x django-3.2

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

创建外键约束时出现问题

问题详情

'无法创建表djangoclientauth_tblusers(errno: 150“外键约束格式不正确”)')

我在做什么?

我在下面创建了一个 tinyint 自动增量字段,但在另一个表中引用它时导致了问题。

模型文件中的代码

class TinyIntField(AutoField):
    def db_type(self, connection):
        return "tinyint(3) AUTO_INCREMENT"

class tblroles(models.Model):
    role_id = TinyIntField(primary_key=True, verbose_name = "role_id")
    name = CharField(max_length = 20)

class tblusers(models.Model):
    user_id = BigAutoField(primary_key=True)
    role = ForeignKey(tblroles, on_delete = models.CASCADE)
    
Run Code Online (Sandbox Code Playgroud)

迁移文件中的代码

migrations.CreateModel(
    name='tblroles',
    fields=[
        ('role_id', clientauth.models.TinyIntField(primary_key=True, serialize=False, verbose_name='role_id')),
        ('name', models.CharField(max_length=20))
    ],
),
migrations.CreateModel(
    name='tblusers',
    fields=[
        ('user_id', models.BigAutoField(primary_key=True, serialize=False)),
        ('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='clientauth.tblroles')),
    ],
),
Run Code Online (Sandbox Code Playgroud)

赏金问题

on_delete=django.db.models.deletion.CASCADE, to='clientauth.tblroles'

上面代码中的这一行没有设置级联删除数据库端。我检查了文档,但找不到设置级联删除的文档。你能推荐一个吗?

python django python-3.9 django-3.2

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

ImportError:无法从“django.contrib.postgres.fields.jsonb”导入名称“KeyTextTransform”

新进口的用途是什么:

ImportError: cannot import name 'KeyTextTransform' from 'django.contrib.postgres.fields.jsonb'
Run Code Online (Sandbox Code Playgroud)

我做了一些互联网搜索,但没有立即找到该错误的结果。

我正在尝试从 django 3.2 升级到 django 4.1.2

django django-3.2 django-4.1

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

为什么 Django 外键 id __in 查询无法匹配 None?

在可以为空的外键上过滤查询集时,我可以按 ID 值 ( foo_id=123) 或 None ( foo_id=None) 进行过滤。但是,如果我尝试按列表 ( foo_id__in=[123, None]) 进行过滤,则会None被忽略。

为什么会发生这种情况?使用包含 None 的列表过滤外键的最佳解决方法是什么?

例子:

from django.db import models

class Foo(models.Model):
  name = models.CharField(max_length=100)

class Bar(models.Model):
  foo = models.ForeignKey(Foo, on_delete=models.PROTECT,
                          blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
foo = Foo.objects.create(name='myfoo')
Bar.objects.create(foo=foo)
Bar.objects.create(foo=None)

Bar.objects.count()                                    # 2
Bar.objects.filter(foo_id=foo.id).count()              # 1
Bar.objects.filter(foo_id=None).count()                # 1
Bar.objects.filter(foo_id__in=[foo.id, None]).count()  # 1 - Expected 2!
Run Code Online (Sandbox Code Playgroud)

django django-models django-3.2

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