I'm trying to create users with the rest framework, but i can create more than one with the same email, how do i validate email taken?
this is my serializer code:
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
class UserSerializer(serializers.ModelSerializer):
invoices = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
password = serializers.CharField(write_only=True)
def create(self, validated_data):
user = get_user_model().objects.create(
email=validated_data['email'],
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = User
write_only_fields = 'password'
read_only_fields = 'id'
fields = ('id',
'username',
'email',
'password',
'invoices',
)
Thanks in advance!
Ok, further reading on the REST FRAMEWORK documentation , there is the "unique field" validator, by adding this, it works perfectly.
email = serializers.EmailField(validators=[UniqueValidator(queryset=User.objects.all())])
So it would look like this
class UserSerializer(serializers.ModelSerializer):
invoices = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
password = serializers.CharField(write_only=True)
email = serializers.EmailField(validators=[UniqueValidator(queryset=User.objects.all())])
def create(self, validated_data):
user = get_user_model().objects.create(
email=validated_data['email'],
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = User
write_only_fields = 'password'
read_only_fields = 'id'
fields = ('id',
'username',
'email',
'password',
'invoices',
)
Thanks for the support!