Python Django Rest框架序列化程序:正在验证object.user是否为request.user
我正在使用Django REST Framework开发REST API,在我的ModelViewSet中,我需要验证当前的Python Django Rest框架序列化程序:正在验证object.user是否为request.user,python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,我正在使用Django REST Framework开发REST API,在我的ModelViewSet中,我需要验证当前的请求。用户有权编辑特定对象 我找到了文档中指定权限如何工作的部分,但这是在ViewSet端,而不是序列化程序端: class FooViewSet(viewsets.ModelViewSet): model = Foo serializer_class = FooSerializer def get_queryset(self):
请求。用户有权编辑特定对象
我找到了文档中指定权限如何工作的部分,但这是在ViewSet端,而不是序列化程序端:
class FooViewSet(viewsets.ModelViewSet):
model = Foo
serializer_class = FooSerializer
def get_queryset(self):
return self.request.user.foos.all()
def perform_create(self, serializer):
serializer.save(user=self.request.user)
def get_permissions(self):
if self.action == "list":
permission_classes = [permissions.IsAuthenticated]
else:
permission_classes = [IsObjectUser]
return [permission() for permission in permission_classes]
当403不是合适的用户时,这将很好地工作,但我相信我也应该进行序列化程序级验证?如何在validate
方法中获取要检查的对象
class FooSerializer(serializers.ModelSerializer):
class Meta:
model = Foo
fields = [
"type",
"title",
"description",
"image",
]
def validate(self, attrs):
# <-- how can I get the object so I can check against the self.request.user?
class FooSerializer(serializers.ModelSerializer):
类元:
model=Foo
字段=[
“类型”,
“头衔”,
“说明”,
“图像”,
]
def验证(自身、属性):
#我的答案是你不应该。理想情况下,序列化程序不知道该请求。这就是视图领域(除了例外)。另外,由于FooSerializer
的字段中未指定user
,因此验证用户没有意义。如果可以指定用户,则应验证该用户。def validate(self,attrs):
def validate(self, attrs):
# <-- how can I get the object so I can check against the self.request.user?
userobj=self.context['request'].user.
print(attrs)
title=attrs.get("title")
enter code here
attrs.update({'title': title})
attrs = super().validate(attrs)
return attrs
#