如何连接通过外键连接的三个表

时间:2015-06-06 17:08:42

标签: python django django-models

我将模型设置为:

class SubItem(models.Model):
    name=models.CharField(max_length=100)
    price=models.IntegerField()

class Item(models.Model):
    owner=models.OneToOneField(User)

class ItemSubItems(models.Model):
    item=models.ForeignKey(Item)
    subitem=models.ForeignKey(SubItem)

所以现在我希望每个项目都得到"价格"通过" ItemSubItems"与所有子项目相关的子项目类。

我在尝试:

item.itemsubitems_set.subitem_set.aggregate(Sum('price'))['price__sum']

但我收到错误' RelatedManager'对象没有属性' subitem_set'。 这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

好吧,你几乎走在正确的轨道上。

qs = Item.objects.annotate(pricesum=Sum('itemsubitems__subitem__price'))

应该(我现在还没有尝试过)给你一个所有项目的查询集,每个项目都有一个名为pricesum的属性,它是相关子项的价格之和。 请阅读here了解更多信息和示例

P.S: 我现在已经尝试过具有类似关系的我的模型(参见here) 并且正确地跨越了这种关系,没有任何错误:

qs = Subject.objects.annotate(mcount=Count('computer_subject__player__user__username'))
for i in qs:
    print i.name, i.mcount