[英]Serialize queryset based on individual field values using Django Rest Framework
目標
如果對象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文檔討論了一些高級的序列化程序用法,而本文的后半部分將深入探討一個示例。 但是,它似乎並未涵蓋此特定問題。
主意
一個有問題的解決方案是在之后迭代序列化的數據,並為每個已revealed=false
對象刪除info
字段。 但是1)它涉及一個額外的循環,並且2)需要在數據序列化的任何地方實現。
我建議您使info
字段出現在所有記錄中,但是如果revealed
為false,則將其保留為空。 如果可以接受,則應該可以使用SerializerMethodField
實現它。
另外,您可以向模型類中添加一個revealed_info
屬性,然后通過序列化器將其公開。
@property
def revealed_info(self):
return self.info if self.revealed else None
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.