2017-08-21 100 views
0

如何過濾多個到多個字段。 比如我有:Django - 過濾多個到多個字段

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


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

隨着 產品= Product.objects.filter(類別=類別) 我會得到的查詢與產品在類別列表中。 如何獲取該類別中所有產品的所有可能託運人的清單?第二個問題是如何從這個查詢中獲得製造商的所有實例。

現在的廠家提取貌似

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

,但我相信這應該是更好的方式 此外,我沒有任何想法如何得到這個查詢所有可能的貨主的名單。

回答

1

要獲得所有產品都貨主在給定的類別:

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

這是可能的,這將返回重複的值,這樣你就可以調用它.distinct()

爲了讓製造商更整齊,你可以這樣做:

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

在另一方面,它似乎更爲明智來我把類別字段作爲ForeignKey田野上Product模型,而不是另一邊。