0

拥有该简化模型:

subproducts = models.ManyToManyField("self", blank=True, symmetrical=False)
active = models.BooleanField(default=False, db_index=True)

和这样的数据:

  • 产品一
    • 子项目 1
    • 次级方案 2
  • 产品 2
    • 次级方案 3
    • 子计划 4
  • 产品 3
    • 子项目 5
    • 子项目 6

假设产品 1-3 是主要产品,SubP* 是子产品。有一个 ID 为 Product 1 和 Product 3 的元组:(1, 3)

我想得到他们所有的子产品,所以我的查询应该返回 (SubP 1, SubP 2, SubP 5, SubP 6)

如何编写该查询?我可以循环列表并对每个产品进行 1 个查询,但是包含 1000 个对象的列表会杀死我的数据库。有没有更好的办法?

4

1 回答 1

1

你可以这样做:

class MyModel(models.Model):
    subproducts = models.ManyToManyField("self", blank=True, symmetrical=False)

查询将是:

sub_products = MyModel.objects.filter(mymodel__id__in=[1, 3]).distinct()

如果您有权访问对象列表,

sub_products = MyModel.objects.filter(mymodel__in=[<object_list>]).distinct()

更多关于 M2M 关系的信息在这里(阅读Reverse m2m queries are supported (i.e., starting at the table that doesn’t have a ManyToManyField)::)

于 2013-07-25T13:45:50.510 回答