2017-02-24 71 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) 
相关问题