dazai
dazai

Reputation: 716

Why do I keep getting Class ModelSerializer missing "Meta" attribute?

whenever I try to access the view for my registration serializer I keep getting that I'm missing the Meta attribute even though it's there. I tried making some changes to the code but it doesn't seem to work so it's clearly something I'm missing.

Why is this happening?

This is the serializer:

class UserRegistrationSerializer(serializers.ModelSerializer):

   username = serializers.CharField(
       required=True,
       validators=[UniqueValidator(queryset=User.objects.all())]
   )

   email = serializers.ModelSerializer(
       required=True,
       validators=[UniqueValidator(queryset=User.objects.all())]
   )

   password = serializers.CharField(
       required=True,
       label="Password",
       style={'input_type': 'password'}
   )

   password_2 = serializers.CharField(
       required=True,
       label="Confirm Password",
       style={'input_type': 'password'}
   )

   class Meta(object):
       model = User
       fields = ['username', 'email', 'password', 'password_2',]

   def validate_password(self, value):
       if len(value) < 8:
           raise serializers.ValidationError(
               "Password should be at least 8 characters long.")
       return value

   def validate_password_2(self, value):
       data = self.get_initial()
       password = data.get('password')
       if password != value:
           raise serializers.ValidationError("Passwords doesn't match.")
       return value

   def validate_username(self, value):
       if User.objects.filter(username=value).exists():
           raise serializers.ValidationError("Username already exists.")
       return value

   def create(self, validated_data):

       user_data = {
           'username': validated_data.get('username'),
           'email' : validated_data.get('email'),
           'password': validated_data.get('password'),
       }

       user = User.objects.create_user(
               data=user_data,
               site=get_current_site(self.context['request'])
           )

       return validated_data

Upvotes: 0

Views: 454

Answers (1)

taha maatof
taha maatof

Reputation: 2165

i think its the Meta(object) line in class meta, it should be:

class Meta:
   model = User
   fields = ['username', 'email', 'password', 'password_2',]

Upvotes: 1

Related Questions