-1

I want to erase username, password2 field from rest auth and add nickname and profile image. So we made the code as follows, but Nickname and profile image were added normally, but username and password2 were not erased. How can I erase them? Here is my code.

models.py

from django.db import models
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser, PermissionsMixin
from django.utils.translation import ugettext_lazy as _

class UserManager(BaseUserManager):
    use_in_migrations = True

    def create_user(self, email, profile, nickname, password):
        user = self.model(
            email=self.normalize_email(email),
            nickname=nickname,
            profile=profile,
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password):
        user = self.create_user(
            email=self.normalize_email(email),
            password=password,
        )
        user.staff = True
        user.admin = True
        user.save(using=self._db)
        return user

class User(AbstractBaseUser, PermissionsMixin):
    username = None
    email = models.EmailField(_('email address'), unique=True)
    nickname = models.CharField(max_length=10)
    profile = models.ImageField(default='default_image.jpeg')

    objects = UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

serializers.py

from rest_framework_simplejwt.serializers import TokenObtainSerializer
from .models import User
from rest_framework import serializers
from rest_auth.registration.serializers import RegisterSerializer
from allauth.account import app_settings as allauth_settings
from allauth.utils import email_address_exists
from allauth.account.adapter import get_adapter
from allauth.account.utils import setup_user_email
from django.utils.translation import ugettext_lazy as _

class CustomRegisterSerializer(RegisterSerializer):
    nickname = serializers.CharField(required=True)
    profile = serializers.ImageField(use_url=True)

    def validate_email(self, email):
        email = get_adapter().clean_email(email)
        if allauth_settings.UNIQUE_EMAIL:
            if email and email_address_exists(email):
                raise serializers.ValidationError(
                    _("A user is already registered with this e-mail address."))
        return email

    def validate_password1(self, password):
        return get_adapter().clean_password(password)

    def get_cleaned_data(self):
        return {
            'email': self.validated_data.get('email', ''),
            'password': self.validated_data.get('password', ''),
            'nickname': self.validated_data.get('nickname', ''),
            'profile': self.validated_data.get('profile', ''),
        }

    def save(self, request):
        adapter = get_adapter()
        user = adapter.new_user(request)
        self.cleaned_data = self.get_cleaned_data()
        adapter.save_user(request, user, self)
        setup_user_email(request, user, [])
        user.save()
        return user

class userSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('email','password', 'nickname','profile')

views.py

class customSignUpView (RegisterView) :
    serializer_class = CustomRegisterSerializer

thank in advance

leedjango
  • 411
  • 2
  • 9
  • 18

1 Answers1

0

Add this to your settings.py file, your custom serializer route and it will work fine

REST_AUTH_REGISTER_SERIALIZERS = { 
    'REGISTER_SERIALIZER': 'your_app_name.serializers.CustomRegisterSerializer'
}
Pranay Ambre
  • 87
  • 1
  • 8