Django auth有username和first_name字段。但是用户名有字段选项unique = True。这可以防止用户在注册时提供与用户名相同的first_name并引发IntegrityError。如何绕过这个并保持用户名唯一?即。没有两个用户应该拥有相同的用户名。但用户名可以与first_name相同。两个用户可以拥有相同的first_name,last_name。
答案 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
来引用身份验证。