【发布时间】:2018-05-18 05:02:10
【问题描述】:
在generics.GenericAPIView 中,重写get_serializer_class() 方法只会为整个查询集动态选择一个序列化程序。有没有办法根据对象的某些属性值将不同的序列化程序应用于同一查询集中的不同对象?提前致谢!
【问题讨论】:
-
是的,这是完全有可能的,虽然不是在
get_serializer_class- 其他地方,也不是一个好主意。您能否详细说明您希望实现的目标,因为拥有不同的 API 响应格式不是一个好习惯。统一是有用的。您能否更详细地描述两个不同序列化程序的用例? -
是的。例如,我有 5 种不同类型的通知。由于我想按时间对它们进行排序,出于效率原因,我将它们存储在同一个模型中,它们由
ntype属性来区分。查询集是按时间排序的不同类型通知的列表,我想将不同的序列化程序应用于不同的类型,因为我要返回的每种类型都有额外的属性。 -
您可以订阅 get_seriakizer 函数,以便根据某些字段或方法提供正确的序列化。
-
为什么不使用基于
ntype获得正确值的单个序列化方法字段?请参阅下面的答案,了解如何实现这一目标!
标签: django django-rest-framework django-serializer