拥有简化模型:
subproducts = models.ManyToManyField("self", blank=True, symmetrical=False)
active = models.BooleanField(default=False, db_index=True)
和这样的数据:
假设产品1-3是主要产品,SubP *是子产品。 具有产品1和产品3的ID的元组:(1,3)
我想得到他们所有的子产品,所以我的查询应该返回(SubP 1,SubP 2,SubP 5,SubP 6)
如何编写该查询?我可以循环列表并对每个产品进行1次查询,但是包含1000个对象的列表会终止我的数据库。 还有更好的办法吗?
答案 0 :(得分: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()
更多info on M2M relationships here(阅读:Reverse m2m queries are supported (i.e., starting at the table that doesn’t have a ManyToManyField):
)