如何在Django Rest框架中过滤嵌套的序列化器

时间:2020-06-22 14:29:07

标签: django-rest-framework

我有这样的观点:

class PizzaViewSet(viewsets.ModelViewSet):
    queryset = PizzaCategory.objects.all()
    serializer_class = PizzaCategorySerializer
    model = PizzaCategory

我的序列化器是:

class PizzaCategorySerializer(CustomModelSerializer):
    pizzas = PizzaSerializer(many=True)

    class Meta:
        model = PizzaCategory
        fields = "__all__"
        
class PizzaSerializer(CustomModelSerializer):
    images = PizzaImageSerializer(many=True, read_only=True)

    class Meta:
    model = Pizza
    fields = "__all__"

我的端点显示如下内容:

[
  {
    "id": 1,
    "pizzas": [
      {
        "id": 1,
        "images": [
          {
            "id": 1,
            "image": "http://127.0.0.1:8000/media/images/305ced93-8f6.jpg",
            "title": "pizza.jpg",
          }
        ],
        "price": "10.00",
        "name": "my pizza example",
        "category": 1
      }
    ],
    "name": "big cheese",
  },
  ...

我的问题:我需要按价格(例如,价格等于5)过滤结果。

在我看来,类似这样的方法应该起作用:

 pizzas = PizzaSerializer(Pizzas.objects.filter(price=5), many=True)

但是,没有任何变化。我该如何正确过滤?

1 个答案:

答案 0 :(得分:0)

类PizzaCategorySerializer(CustomModelSerializer): pizzas = serializers.SerializerMethodField()

class Meta:
    model = PizzaCategory
    fields = "__all__"
def get_pizzas(self, obj):
    try:
        queryset = Pizzas.objects.filter(price=5)
        serializer = PizzaSerializer(queryset, many=True)
        return serializer.data
    except:
        return None
相关问题