Django Rest -api User registration

203 Views Asked by At

I've been trying to implement register method on UserView , to create new user each time I call Post request , But I got this error in postman

"detail": "Method "POST" not allowed."

views.py

class UserView(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializers

    @action(detail=True, methods=["post"])
    def register(self, request):
        serializer = UserSerializers(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_404_NOT_FOUND

even when I set detail=False , I got this error too ,even though I don't have any many-to-many relationship between any two models.

TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use groups.set() instead.

Serializer.py

class UserSerializers(ModelSerializer):
    class Meta:
        model = User
        fields = "__all__"
        # exclude the 'password' field from the serialization
        extra_kwargs = {"password": {"write_only": True}}

    def create(self, validated_data):
        user = User.objects.create_user(**validated_data)
        Token.objects.create(user=user)
        return user
1

There are 1 best solutions below

0
HamidReza Saad On

You can overwrite the create() from ModelViewSet to create the users:

class UserView(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializers

    def create(self, request, *args, **kwargs):
        serializer = UserSerializers(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_404_NOT_FOUND