I am trying to create an endpoint for creating a new user. If I put a create method in the serializer will perform_create still be called on my ApiView? It seems User.objects.create is still being called because if I pass 'confirm-password' in the serializer I get an error:
Got a
TypeErrorwhen callingUser.objects.create(). This may be because you have a writable field on the serializer class that is not a valid argument toUser.objects.create(). You may need to make the field read-only, or override the UserSerializer.create() method to handle this correctly. Original exception text was: 'confirm_password' is an invalid keyword argument for this function.
Why is User.objects.create() being called when I'm using .create_user() in the serializer create method? This is also causing is_active to default to true even though I'm setting it to false in the serializer.
class UserCreateSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True, required=False)
confirm_password = serializers.CharField(write_only=True, required=False)
class Meta:
model = get_user_model()
fields = ('id', 'email', 'username',
'first_name', 'last_name', 'password',
)
read_only_fields = ('date_joined')
def validate_email(self, value):
if value and User.objects.filter(email=value).count():
raise serializers.ValidationError(u'Email addresses is already registered.')
return value
def create(self, validated_data):
user = get_user_model().objects.create_user(
username=validated_data['username'],
email=validated_data['email'],
password=validated_data['password'],
is_active=False)
return user
class UserCreateApiView(generics.CreateAPIView):
serializer_class = UserSerializer
permission_classes = [AllowAny,]
queryset = get_user_model().objects.all()