Home > Net >  How to change the field name of Serialzed User Model on frontend in Django Rest Framework?
How to change the field name of Serialzed User Model on frontend in Django Rest Framework?

Time:03-31

I am making a simple Login/Logout App using REST API in Django DRF. I am using the default User model for this behavior.

In the Login API, I wanted to authenticate the user with email, hence I wrote the custom authentication using ModelBackend. Everything works fine.

But, I want to change the word username to email in the front of the Login API. I tried using the source attribute, but it does not change. Is there any easy way to do it? I am looking for something like verbose_name, that is used in Django Models.

My serializers.py is:

class LoginSerializer(serializers.Serializer):
    username = serializers.CharField(source='Email')
    password = serializers.CharField()

    def validate(self, data):
        user = authenticate(**data)
        if user and user.is_active:
            return user
        raise serializers.ValidationError('Incorrect Credentials Passed.')

Again, I am using the default User Model, and I don't want to overwrite/override/extend the User Model. I just want to change the name of the field username on the frontend to be shown as email.

Any help will surely be appreciated.

CodePudding user response:

You need to pass a value called email and not username to your ModelBackend subclass:

class LoginSerializer(serializers.Serializer):
    username = serializers.CharField()
    password = serializers.CharField()

    def validate(self, data):
        user = authenticate(**{'email': data['username'], 'password': data['password']})
        if user and user.is_active:
            return user
        raise serializers.ValidationError('Incorrect Credentials Passed.')
  • Related