How to have django auth take username and firstname same value?

Django auth has username and first_name fields. But username has field option unique=True. This prevents a user from giving first_name same as username when registering and raises IntegrityError. How to bypass this and also keeping username unique? ie. no two users should have the same username. But username can be same as first_name. And two users can have same first_name, last_name.


You cannot achieve that. If you want to have the same value in fields first_name and username and one of them is not unique, the other one also cannot be unique.

As far as I understand what you're doing here, you just want to display first_name instead of username - to achieve that just use {{ user.first_name }} instead of just {{ user }} . If you need to store some additional information about users you can also define Profiles where you can implement your own __str__ method.


You will have to implement custom authentication backend that used first_name as username.

During registration, you can duplicate username with first_name or generate random username which you will never use, as you will always use first_name instead.

You will have have to take care of

  • Take create while creating/registering user.
  • Username (in your case first name) should be unique
  • The code in authentication backend would be something like (this is just a sample code):

    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 
    

    Refer Writing authentication backend.

    There are quite a few examples of how to user email to authenticate that you can refer to authenticate using first_name .

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

    上一篇: django可以使用相同的用户名处理多个用户吗?

    下一篇: 如何让django auth获取用户名和名字相同的值?