Django序列化程序过滤外键

时间:2020-10-01 11:06:32

标签: django django-rest-framework

视图:

  class MPNView(viewsets.ModelViewSet):
      queryset =  MPN.objects.all()
      serializer_class = MPNSerializer

序列化器:

class ProductsSerializer(serializers.ModelSerializer):

  class Meta:
      model = Products
      fields = "__all__"

class MPNSerializer(serializers.ModelSerializer):
  products = ProductsSerializer(many=True)

  class Meta:
      model = MPN
      fields = "__all__"

型号:

class MPN(Model):
  number     = models.CharField(max_length=50)
  created_at = models.DateTimeField(auto_now_add=True)

class Product(Model):
  mpn           = models.ForeignKey(to=MPN, on_delete=models.CASCADE, related_name="products", null=True, blank=True)
  created_at    = models.DateTimeField(auto_now_add=True)

我得到的结果:

  [
        {
            "id": 1221,
            "products": [],
            "number": "B07BMTYSMR",
            "created_at": "2020-09-29T03:05:01.560801Z"
        },
        {
            "id": 1222,
            "products": [
                {
                    "id": 2352,
                    "created_at": "2020-09-30T12:49:09.347655Z",
                },
                {
                    "id": 2352,
                    "created_at": "2020-09-30T12:49:09.347655Z",
                }
              ]
          }
    ]

我期望的结果:

  [
        {
            "id": 1222,
            "products": [
                {
                    "id": 2352,
                    "created_at": "2020-09-30T12:49:09.347655Z",
                },
                {
                    "id": 2352,
                    "created_at": "2020-09-30T12:49:09.347655Z",
                }
              ]
          }
  ]

这是我的代码。我共享了视图,模型和序列化器。

在这里,我正在尝试获取与ForeignKey相关字段的结果。

但是,我想添加一个过滤器,以便它忽略乘积为[](空数组)的数据

请看看我该如何实现。

1 个答案:

答案 0 :(得分:2)

尝试过滤查询集:

queryset =  MPN.objects.all().exclude(products__isnull=True)

在这里您将使用“产品”并检查其是否为空。空结果将被排除。