我在找出在 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)
当然有比我建议的方法更好的方法吗?对我来说似乎效率不高。