我一直在尝试在 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
您可以覆盖 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