2015-06-06 84 views
0

我已經建立了我的模型作爲連接如何加入三個表:通過外鍵

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

subitem_set屬性可用於項目的特定實例(到特定項目對象),而不是一般項目類別。 – Pynchia

+0

@Pynchia那麼正確的方法是什麼? for循環? – lost111in

+0

嘗試'Items.objects.annotate(pricesum = Sum('itemsubItems__subitem__price'))' – Pynchia

回答

0

好吧,你幾乎走在正確的軌道上。

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

應該(我沒試過現在)給你所有的項目,每個項目都將有一個名爲pricesum的屬性,這是它的相關的子項的價格總和的查詢集。 請提供更多信息和例子閱讀here

PS: 我有一個類似的關係現在試圖在我的模型(見here) 和關係正確跨越,沒有任何錯誤:

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

給出錯誤「Manager無法通過Item實例訪問」 – lost111in

+0

項目中有額外的s,現在已更正,但我不認爲那就是問題所在。請提供有關錯誤信息和如何使用查詢的更多信息/上下文 – Pynchia

+0

試圖打印現在的查詢 – lost111in