【发布时间】:2020-01-19 01:21:03
【问题描述】:
在我的项目中,我刚刚将 Django Rest Framework 升级到了 3.6 版。以前,我可以排除在序列化程序上声明的字段,现在它阻止了我这样做。
class MyModelSerializer(Serializer):
expensive_field = SerializerMethodField()
class Meta:
model = MyModel
exclude = ['expensive_field']
def get_expensive_field(self, obj):
return expensive_calculation()
我之所以要这样做是因为有一些方法字段计算起来相当昂贵,我只想在明确请求时渲染它们。
到目前为止的机制是排除这些字段。当在请求中设置fields 参数时,会动态创建从常规序列化程序继承的序列化程序。它包括以前排除的字段。
有没有办法使用最新版本的 DRF 来实现这一点?
(当然,我可以为每个这样的情况创建额外的序列化程序。但是,这不是通用的,不是 DRF 支持的东西,并且还需要每个视图的序列化程序的指数数量,具体取决于要排除的字段数量。 )
【问题讨论】: