序列化器-在Django Rest Framework 3中包含额外的上下文不起作用

时间:2018-09-05 15:14:00

标签: django-rest-framework

文档指出:

  

在实例化序列化程序时,可以通过传递driver.switchTo().frame(your locator for 1st iframe here);// to switch to 1st iframe // your action here driver.switchTo().defaultContent(); driver.switchTo().frame(your locator for 2nd iframe here); // to switch to 2nd iframe 参数来提供任意其他上下文。

好吧,让我们这样做:

context

文档然后指出:

  

可以通过访问serializer = AccountSerializer(account, context={'foo':'bar'}) 属性在任何序列化器字段逻辑中使用上下文字典。

好吧,让我们这样做:

self.context

这些打印语句导致:

class AccountSerializer(serializers.ModelSerializer):

    custom_field = serializers.SerializerMethodField()

    class Meta:
        model = Account
        fields = ('id', 'name', 'custom_field')

    def get_custom_field(self, obj):
        print('Context:', self.context)
        foo = self.context.get('foo')
        print('Foo:', foo)
        ...
        return "custom data"

我在这里做错了什么?无论什么上下文都没有用所需的额外上下文进行修改。

1 个答案:

答案 0 :(得分:3)

您正在显示DRF GenericAPIView中使用序列化程序的结果。默认情况下,get_serializer_context方法提供上下文条目“ request”,“ view”和“ format”,而序列化程序构造函数的context参数无效。 如果要在此处添加更多内容,还需要在视图中覆盖

def get_serializer_context(self):
    context = super().get_serializer_context()
    context['foo'] = 'bar'
    return context