gpt4 book ai didi

django - 用户管理器方法 create() 和 create_user()

转载 作者:行者123 更新时间:2023-12-04 06:23:00 24 4
gpt4 key购买 nike

我遇到过create()的一些可疑行为User的方法对象管理器。看起来像 password创建 User 不需要字段如果您使用此方法,则对象。结果你得到 User空白 password .如果您使用 create_user方法且不指定 password它创建 User密码不可用(通过 set_unusable_password())。

我不知道为什么 create()方法没有 raise exception当您尝试在没有 password 的情况下创建用户时- 在文档中指定此字段是必需的。create()有什么问题吗?方法/文档?

最佳答案

这就是为什么用户模型有一个带有 UserManager.create_user() 的自定义管理器的原因。创建用户的方法。使用 QuerySet.create() 有两个问题方法在 User实例:

  • 如果运行管理命令 python manage.py sql ,关注auth_user架构:
    CREATE TABLE "auth_user" (
    ...
    "password" varchar(128) NOT NULL,
    ...
    )

    在 SQL 中,一个空字符串,'' , 不等于 NULL ,即 ISNULL('') != TRUE .
  • QuerySet.create()QuerySet.update() 不触发模型验证 .模型验证仅在 ModelForm 时发生实例调用 Model.full_clean()实例方法。

    在使用 QuerySet 的上下文中引发验证错误API 直接在 Django 中毫无意义。这就是为什么您可以执行类似 User.objects.create(username='foo', password='') 的操作的原因。即使 CharField().validate(value='', None)会引发 ValidationError为空字符串。

  • 由于上述原因,您应该推迟使用 User.objects.create()并依赖提供的 User.objects.create_user()模型的自定义管理器中的方法。

    关于django - 用户管理器方法 create() 和 create_user(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11544398/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com