如何让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进行身份验证。

    链接地址: http://www.djcxy.com/p/33689.html

    上一篇: How to have django auth take username and firstname same value?

    下一篇: how to override the verbose name of a superclass model field in django