簡體   English   中英

Django Rest Framework過濾多對多字段

[英]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字段可寫,則只需將其SerializerMethodFieldSerializerMethodField 另一種選擇是在序列化單個對象時動態刪除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_representationto_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.

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