Django - 过滤多个字段

时间:2017-08-21 19:33:56

标签: django django-queryset

如何过滤多个到多个字段。 例如我&#;;

class Category(models.Model):
    products = models.ManyToManyField(Product)
    ...


class Product(models.Model):
    shippers = models.ManyToManyField(Shipper)
    manufacturer = models.ForeignKey(Manufacturer)
    ...

使用 products = Product.objects.filter(category = category) 我将查询类别中的产品列表。 如何获取该类别中所有产品的所有可能托运人的清单?第二个问题是如何从这个查询中获取所有制造商实例。

现在提取制造商看起来像

manufacturer_ids = products.values_list('manufacturer').distinct()
manufacturers = Manufacturer.objects.filter(id__in=manufacturer_ids)

但我相信这应该是更好的方式 此外,我也不知道如何从此查询中获取所有可能的出货单列表。

1 个答案:

答案 0 :(得分:1)

要获得给定类别中所有产品的所有托运人:

shippers = Shipper.objects.filter(product__category=category)

这可能会返回重复值,因此您可以在其上调用.distinct()

为了让制造商更整洁,您可以:

manufacturers = Manufacturer.objects.filter(products__in=products)

另一方面,将类别字段作为ForeignKey字段放在Product模型上而不是反过来似乎更明智。