Django Rest -api 用户注册

问题描述 投票:0回答:1

我一直在尝试在 UserView 上实现注册方法,以便每次调用 Post 请求时创建新用户,但是我在邮递员中遇到了这个错误

“详细信息”:“不允许方法“POST”。”

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

即使我设置detail=False,我也得到了这个错误,即使我在任何两个模型之间没有任何多对多关系。

TypeError:禁止直接分配到多对多集的前向端。使用 groups.set() 代替。

序列化器.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
python django django-rest-framework django-views user-registration
1个回答
0
投票

您可以覆盖 ModelViewSet 中的 create() 来创建用户:

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
© www.soinside.com 2019 - 2024. All rights reserved.