0

我在找出在 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)

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

4

1 回答 1

0

检查文档中的此部分:跨越多值关系

除非我错过了什么,否则过滤Item应该可以工作:

Item.objects.filter(attribute_name="a1").filter(attribute__name="a2")
于 2013-06-16T23:35:16.623 回答