如何在 Django 中使用多个对象序列化方法字段?

How to seralize a MethodField with more than one object in Django?

我想序列化一个方法来检查故事的作者是否是当前登录的用户,如果是 returns true,如果不是 false。然而,Django 的 Docs 声明 Serliazer 方法除了 self 之外只需要一个参数。那么除了故事(对象)之外,我如何访问用户模型?

我在想类似的事情:

class StorySerializer(serializers.ModelSerializer):
    story_owner_permission = serializers.SerializerMethodField('check_story_owner_permission')

    class Meta:
        model = Story 
        fields =  ['story_owner_permission']

    def check_story_owner_permission(self, story, request):
        story_author = story.author.id
        current_user = request.user.id
        if (story_author == current_user):
            return True
        else:
            return False

但是没用。 check_story_owner_permission() missing 1 required positional argument: 'request'

您可以在序列化程序中使用 context,默认情况下,如果您从视图调用序列化程序,视图会自动填充它 (see get_serializer_context):

class StorySerializer(serializers.ModelSerializer):
    story_owner_permission = serializers.SerializerMethodField('check_story_owner_permission')

    class Meta:
        model = Story 
        fields =  ['story_owner_permission']

    def check_story_owner_permission(self, obj):
        return obj.author.id == self.context["request"].user.id