目标
如果一个对象有revealed=true
它序列化为:
{
"id":1,
"info":"top secret info",
"revealed":true
}
如果一个对象revealed=false
的info
字段是null
:
{
"id":2,
"info":null,
"revealed":false
}
所以对于对象的查询集:
[
{
"id":1,
"info":"top secret info 1",
"revealed":true
},
{
"id":2,
"info":null,
"revealed":false
},
{
"id":3,
"info":"top secret info 3",
"revealed":true
}
]
是否可以在 Django Rest Framework Model Serializer 类中实现这一点?
class InfoSerializer(serializers.ModelSerializer):
class Meta:
model = Info
fields = ('id', 'info', 'revealed')
背景
该DRF文档讨论一些先进的串行器使用,并且这等后潜入一个例子。然而,它似乎没有涵盖这个特定问题。
想法
一个hacky解决方案是之后迭代序列化数据,并删除info
每个具有revealed=false
. 但是 1) 它涉及一个额外的循环,并且 2) 需要在数据序列化的任何地方实现。
我建议您让该info
字段出现在所有记录中,但在revealed
为 false时将其保留为 null 。如果这是可以接受的,您应该能够使用SerializerMethodField
.
或者,您可以revealed_info
向模型类添加一个属性,并通过序列化程序公开它。
@property
def revealed_info(self):
return self.info if self.revealed else None
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句