Django REST Fram中序列化程序“包括额外上下文”需要澄清

2024-05-13 23:08:23 发布

您现在位置:Python中文网/ 问答频道 /正文

根据:https://www.django-rest-framework.org/api-guide/serializers/#including-extra-context

我可以写:

serializer = AccountSerializer(account, context={'request': request})

然后serializer.data将看起来像:

# {'id': 6, 'owner': 'denvercoder9', 'created': datetime.datetime(2013, 2, 12, 09, 44, 56, 678870), 'details': 'http://example.com/accounts/6/details'}

但它没有说明我将如何实施它。我的意思是,它必须基于对rest_framework.reverse的调用,有点像在这个示例中:

class CompleteTaskModelSerializer(rest_serializers.ModelSerializer):

    resultLocation = rest_serializers.SerializerMethodField()

    class Meta:
        model = TaskModel
        fields = ('id', 'resultLocation')

    def get_resultLocation(self, obj):
        return reverse('model', obj.model, request=request)

但它不会承认在我的方法get_resultLocation中有任何东西被称为request。这个魔法应该如何工作


Tags: restidobjgetdatetimemodelrequestcontext
1条回答
网友
1楼 · 发布于 2024-05-13 23:08:23

在同一份文件中,它还说:

The context dictionary can be used within any serializer field logic, such as a custom .to_representation() method, by accessing the self.context attribute.

所以我猜示例类可以更改为这样工作

class CompleteTaskModelSerializer(rest_serializers.ModelSerializer):

    resultLocation = rest_serializers.SerializerMethodField()

    class Meta:
        model = TaskModel
        fields = ('id', 'resultLocation')

    def get_resultLocation(self, obj):
        return reverse('model', obj.model, request=self.context['request'])

相关问题 更多 >