簡體   English   中英

使用Django Rest Framework根據各個字段值序列化查詢集

[英]Serialize queryset based on individual field values using Django Rest Framework

目標

如果對象revealed=true它將序列化為:

{
   "id":1,
   "info":"top secret info",
   "revealed":true
}

如果對象revealed=falseinfo字段為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM