2017-02-24 70 views
0

比方說,我有一個產品,可以有各種兒童產品,模特們像這樣的Django如何篩選基於嵌套多對多關係查詢集在一個查詢

class Country(models.Model): 
    name = models.CharField() 

class Product(models.Model): 
    parent = models.ForeignKey(
     'self', null=True, blank=True, related_name='children') 
    name = models.CharField() 
    countries = models.ManyToManyField(Country) 

我的目標是獲取定義所有具有一個或多個孩子的產品產品與特定國家相關聯。

在我的用例中,我需要這些信息作爲Queryset。我已經試過這和它的工作原理:

valid_products = [] 
desired_country = Country.objects.get(name='mycountry') 
for product in Product.objects.all(): 
    for child in product.children.all(): 
     countries = child.countries.all() 
     for country in countries: 
      if country == desired_country: 
       valid_products.append(product.id) 
desired_queryset = Product.objects.filter(pk__in=valid_products) 

這種方法要求和額外的查詢到我的結果轉換成查詢集,我想避免這種情況。

是否有可能使用Django ORM直接過濾這樣的查詢集?

回答

4

您可以簡單地使用雙下劃線語法來關注關係。所以:

desired_queryset = Product.objects.filter(children__countries= desired_country) 
相關問題