Python Django如何基于一个查询中嵌套的多对多关系过滤查询集

Python Django如何基于一个查询中嵌套的多对多关系过滤查询集,python,django,django-models,django-queryset,django-orm,Python,Django,Django Models,Django Queryset,Django Orm,假设我有一个产品,可以有各种子产品,模型的定义如下 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

假设我有一个产品,可以有各种子产品,模型的定义如下

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)
我的目标是检索所有具有一个或多个子产品且链接到特定国家/地区的产品

在我的用例中,我需要这个信息作为查询集。我试过的是这样的,它是有效的:

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过滤这样的查询集吗

您可以使用双下划线语法简单地遵循这些关系。因此:

desired_queryset = Product.objects.filter(children__countries= desired_country)