【问题标题】:Can I change the USERNAME_FIELD in Django 1.5 without creating a custom user?我可以在不创建自定义用户的情况下更改 Django 1.5 中的 USERNAME_FIELD 吗?
【发布时间】:2013-03-18 01:57:20
【问题描述】:

我正在尝试使用默认 Django 用户模型中的电子邮件字段作为用户名。我正在使用 Django 1.5,我看到默认用户有一个 USERNAME_FIELD 属性。

在我的项目中,我想在用户模型中将以下USERNAME_FIELD = 'email' 设置为默认值。

这个小但基本的调整是我唯一想在用户模型中改变的地方。我想知道是否有一种方法可以更改USERNAME_FIELD 而不必继承AbstractUser。我在this question 中看到您可以继承AbstractUser 并为其编写自定义管理器。

所以我想知道是否有更简单的方法来更改该属性?

如果没有,扩展AbstractUser 以使用电子邮件字段作为用户名的最小方法是什么?

【问题讨论】:

标签: django email model django-1.5


【解决方案1】:
#Your app's __init__.py

from django.contrib.auth.models import User

User.USERNAME_FIELD = 'email'

【讨论】:

  • 这会引发错误“django.core.management.base.CommandError:一个或多个模型未验证:auth.user:名为 USERNAME_FIELD 的字段不应包含在可交换的 REQUIRED_FIELDS 中用户模型。auth.user:USERNAME_FIELD 必须是唯一的。将 unique=True 添加到字段参数中。对我来说。
  • 我也有同样的问题......我想知道在 2013 年 3 月到 13 年 5 月左右之间是否有任何改变打破了这一点。我真的很喜欢这个工作..
【解决方案2】:

你必须通过扩展 AbstractBaseUser 而不是 AbstractUser 来编写一个新的自定义用户类

在此处将您的电子邮件声明为 USERNAME_FIELD

您还可以选择声明一个从 BaseUserManager 扩展的自定义用户管理器来处理用户名所需的约束。 您可以从该经理的 create_user 函数中删除用户名

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 2023-04-08
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多