0

Django auth 有 username 和 first_name 字段。但是用户名具有字段选项 unique=True。这可以防止用户在注册时提供与用户名相同的 first_name 并引发 IntegrityError。如何绕过这个并保持用户名唯一?IE。没有两个用户应该有相同的用户名。但用户名可以与 first_name 相同。并且两个用户可以有相同的名字,姓氏。

4

2 回答 2

1

你无法做到这一点。如果您想在字段 first_name 和 username 中具有相同的值,并且其中一个不是唯一的,那么另一个也不能是唯一的。

据我了解你在这里做什么,你只想显示 first_name 而不是 username - 来实现这个只是 use{{ user.first_name }}而不是 just {{ user }}。如果您需要存储有关用户的一些附加信息,您还可以定义配置文件,您可以在其中实现自己的__str__方法。

于 2012-08-05T09:00:03.003 回答
1

您将必须实现用作用first_name户名的自定义身份验证后端。

在注册期间,您可以复制或生成您永远不会username使用first_name的随机用户名,因为您将始终使用它first_name

你将不得不照顾

  • 在创建/注册用户时进行创建。
  • 用户名(在您的情况下是名字)应该是唯一的

身份验证后端的代码类似于(这只是一个示例代码):

def authenticate(self, username=None, password=None):
    try:
        user = User.objects.get(first_name=username)
        if user.check_password(password):
            return user
    except User.DoesNotExist:
        return None 

请参阅编写身份验证后端

有很多关于如何对用户email进行身份验证的示例,您可以参考使用first_name.

于 2012-08-05T09:39:58.123 回答