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