2017-02-23 77 views
0

我有3種型號:Django的查詢集外鍵轉換

class User: 
    ... 

Class Item: 
    ... 

Class Storage: 
    user = foreignkey(user) 
    item = foreignkey(item) 

現在我已經user_id說明,我想使用USER_ID看到所有該用戶的項目有:

storage_list = Storage.objects.filter(user__id = user_id) 

我之後困惑了。我嘗試了以下,他們都沒有工作。

storage_list.item.all() 
storage_list.item_set.all() 
+1

請不要模仿你的模型,包括模型的實際相關部分。這兩個選項都可能適用於*實例*,而不是列表 – Sayse

回答

1

問題是,你的storage_list翻譯成一個列表。 .item_set.all()方法僅對列表中的實際對象有效。

我嘗試使用的基本規則:問你想要什麼。在你的情況下,你真的想擁有這些項目,而不是存儲對象。所以像這樣:

Item.objects.filter(storage__user__id=user_id) 

所以:通過存儲對象與用戶連接的項目。 Django會將它翻譯成適合你的SQL連接。

請注意,您不需要爲用戶執行__id。您可以省略該部分作爲django默認情況下會查看主鍵。所以:

Item.objects.filter(storage__user=user_id) 
+0

非常感謝。我不得不在這裏再問一個問題,如果在課堂上,我有一個'date_added'字段。我想列出他們的項目,我該怎麼做? Thx再次 – viviwill

+1

像這樣:Item.objects.filter(storage__user = user_id).values('id','somefield','storage__date_added')'。對於更多花哨的功能,請查看註釋/聚合:https://docs.djangoproject.com/en/1.10/topics/db/aggregation/。 –