Python Django Rest框架序列化程序:正在验证object.user是否为request.user

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):

我正在使用Django REST Framework开发REST API,在我的ModelViewSet中,我需要验证当前的
请求。用户
有权编辑特定对象

我找到了文档中指定权限如何工作的部分,但这是在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
#