簡體   English   中英

Django Rest Framework-序列化程序中的ForeignKey過濾

[英]Django Rest Framework - ForeignKey filtering in a serializer

我有兩種型號, FridgeProduct Fridge有一個auth.user的ForeignKey,而Product有一個Fridge的ForeignKey,非常簡單。

現在很明顯,我希望用戶只能將產品添加到他的冰箱中。 我想使用DRF為此創建一個API,並且我希望在產品視圖集表單中有一個不錯的下拉列表,因此為什么我必須在序列化程序中執行此操作。 我正在使用viewsets.ViewSet類,因此get_serializer_context似乎沒有任何作用。

class ProductSerializer(serializers.Serializer):
    pk = serializers.IntegerField(read_only=True)
    fridge = serializers.PrimaryKeyRelatedField(queryset=WHAT_QUERYSET)
    name = serializers.CharField(max_length=Product._meta.get_field('name').max_length)
    purchase_date = serializers.DateField()
    before_date = serializers.DateField()

我不知道應該在fridge屬性的queryset關鍵字參數中放入什么。 我無法在該范圍內的任何地方請求request.user ,因為那時沒有上下文或請求變量。

您需要的是基於發出請求的用戶動態查詢集。 您可以通過重寫__init__方法來實現此目的,如下所示:

    def __init__(self, *args, **kwargs):
        super(ProductSerializer, self).__init__(*args, **kwargs)
        request_user = self.context['request'].user
        self.fields['fridge'].queryset = Fridge.objects.filter(user=request_user)

初始字段必須看起來像這樣,因為您必須先指定queryset,否則將獲得AssertionError:

    fridge = serializers.PrimaryKeyRelatedField(queryset=Fridge.objects.all())

但這當然會被覆蓋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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