[英]Django Rest Framework filtering a many to many field
我想過濾一個多對多字段的序列化,但是我不需要創建一個視圖或一個通用視圖(如此處所述) ,因為我需要在另一個視圖中使用數據。
代碼很簡單。 模型中的位置是一個多領域的領域。
class ServiceSerializer(serializers.ModelSerializer):
locations = LocationSerializer(many=True)
# [...]
class Meta:
model = Service
而LocationSerializer為:
class LocationSerializer(serializers.ModelSerializer):
# [...]
class Meta:
model = LocationAddress
# [...]
我想將位置序列化,但僅基於模型中的布爾字段。 active = True 。 我該怎么做?
如果不需要序列化器中的locations
字段可寫,則只需將其SerializerMethodField
到SerializerMethodField
。 另一種選擇是在序列化單個對象時動態刪除locations
字段,如果返回的多個對象沒有相同的active
標志,則將創建不一致的輸出。
要使用SerializerMethodField
,您只需在ServiceSerializer
上添加一個新方法。
class ServiceSerializer(serializers.ModelSerializer):
locations = SerializerMethodField("get_locations")
# [...]
class Meta:
model = Service
def get_locations(self, obj):
if obj.active:
return LocationSerializer(obj.locations.all(), many=True)
return None
這會將locations
設為只讀,這可能不是您想要的。 這也意味着當locations
null
時, locations
將返回null
,並且您可能一直希望完全刪除密鑰。
另一種選擇是只完全刪除鍵在to_representation
( to_native
在DRF 2.x的)方法。
class ServiceSerializer(serializers.ModelSerializer):
locations = LocationSerializer(many=True)
# [...]
class Meta:
model = Service
def to_representation(self, obj):
rep = super(ServiceSerializer, self).to_representation(obj)
del rep["locations"]
return rep
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.