Nick G.
Nick G.

Reputation: 77

django rest registration api error: this field is required

Hello i want to create a simple registration api for my django rest api But when i want to test the registration with curl i get always get this error: {"username":["This field is required."],"password":["This field is required."]}

This is my curl cmd:

curl --request POST --url http://localhost:8000/auth/register/ --header 'content-type: application/json' --data '{"username": "user1","password": "hunter2"}'

views.py RegistrationApi

class RegistrationAPI(generics.GenericAPIView):
    serializer_class = CreateUserSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        return Response({
            "user": UserSerializer(user, context=self.get_serializer_context()).data,
            "token": AuthToken.objects.create(user)
        })

serializers.py

class CreateUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'password')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User.objects.create_user(validated_data['username'],
                                        None,
                                        validated_data['password'])
        return user


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username')

Maybe there is something wrong with the serializers? I already tried so figure out where the problem is but i cant find it

Upvotes: 3

Views: 2578

Answers (1)

ans2human
ans2human

Reputation: 2357

Try this:

class CreateUserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'username', 'email', 'password')
        extra_kwargs = {'password' : {'write_only': True}}
    def create(self, validated_data):
        user = User.objects.create_user(**validated_data)
        return user

Or refer to link Django Rest Framework registrations

Upvotes: 2

Related Questions