OneToMany在Django中查询

时间:2013-06-16 23:25:10

标签: python django django-models

在使用Django中的一对多关系进行查询的最佳方法时,我遇到了一些麻烦。最佳解释一个例子:

class Item(models.Model):
    name = models.CharField(max_length=30)

class Attribute(models.Model):
    item = models.ForeignKey(Item)
    name = models.CharField(max_length=30)

项目可以有多个属性。假设该属性特定于某个项目,因此ManyToMany在此处不合适。如何查找具有name = a1属性但具有name = a2?

的属性的所有项目

这样的事情:

a1_objects = Attribute.objects.filter(name="a1").values("item__id")
a2_objects = Attribute.objects.filter(name="a2").values("item__id")
#Take the intersection (does this method of taking an intersection work?)
ids_with_a1_and_a2 = [id for id in a1_objects if id in a2_objects]
#Get item objects with those ids
results = Item.objects.filter(id__in = ids_with_a1_and_a2)

当然有比我建议的方法更好的方法吗?这对我来说似乎没有效率。

1 个答案:

答案 0 :(得分:0)

请在文档中查看此部分:Spanning multi-valued relationships

除非我遗漏某些内容,否则过滤Item应该有效:

Item.objects.filter(attribute_name="a1").filter(attribute__name="a2")