如何让django auth取用户名和名字相同的值?

时间:2012-08-05 07:15:12

标签: python django authentication django-authentication

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

2 个答案:

答案 0 :(得分:1)

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

据我了解您在此处所做的事情,您只想显示first_name而不是用户名 - 以实现仅使用{{ user.first_name }}而不仅仅是{{ user }}。如果您需要存储一些有关用户的其他信息,您还可以定义Profiles,以便在其中实施自己的__str__方法。

答案 1 :(得分: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 

参考Writing authentication backend

有很多关于如何使用email进行身份验证的示例,您可以使用first_name来引用身份验证。