【问题标题】:How to seralize a MethodField with more than one object in Django?如何在 Django 中序列化具有多个对象的方法字段?
【发布时间】:2020-06-16 18:57:55
【问题描述】:

我想序列化一个方法来检查故事的作者是否是当前登录的用户,如果是,则返回 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'

【问题讨论】:

    标签: django django-rest-framework django-serializer


    【解决方案1】:

    您可以在序列化程序中使用context,默认情况下,如果您从视图中调用您的序列化程序,视图会自动填充它(seeget_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
    

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      相关资源
      最近更新 更多