如何让django auth获取用户名和名字相同的值?
Django身份验证具有用户名和名称字段。 但是,用户名具有字段选项unique = True。 这可防止用户在注册时给first_name与用户名相同并引发IntegrityError。 如何绕过这一点,并保持用户名唯一? 即。 没有两个用户应该有相同的用户名。 但用户名可以与first_name相同。 并且两个用户可以具有相同的first_name,last_name。
你无法做到这一点。 如果您想在first_name和username字段中具有相同的值,并且其中一个值不唯一,另一个值也不能唯一。
据我了解你在这里做什么,你只是想显示first_name而不是用户名 - 以实现这一点,只需使用{{ user.first_name }}
而不是{{ user }}
。 如果您需要存储一些关于用户的附加信息,您还可以定义配置文件,以便在其中实现自己的__str__
方法。
您必须实现使用first_name
作为用户名的自定义身份验证后端。
在注册过程中,您可以使用first_name
复制username
或生成您永远不会使用的随机用户名,因为您将始终使用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
进行身份验证。
上一篇: How to have django auth take username and firstname same value?
下一篇: how to override the verbose name of a superclass model field in django