2012-02-18 40 views
1

所以我有兩個獨立於彼此的類,但都通過使用ForeignKey與User(django)類相關。所以我的問題是,你究竟如何「通過」用戶對象來找到與用戶相關的內容?通過User類訪問一個ForeignKey(Django)

這裏有一個例子

class A(models.Model): 
    item = models.ForeignKey(User) 

class B(models.Model): 
    box = models.ForeignKey(User) 

現在在我看來,我把所有的值B級

B.objects.all() 

,並在我的模板我試圖訪問它像這樣

{% for value in B %} 
    {{ value.B.User.item }} 
{% endfor %} 

但這不起作用..我怎麼能通過用戶類訪問類A?

回答

0

如果我記得我的頭頂,外鍵將在您訪問它們時自動遍歷,因此它應該簡單地爲value.box.item,假設item是您的用戶表中的一列。

至於從用戶那裏得到A,我相信this是你想要的,語法應該是類似some_user.a_set.all()的東西。注意a_set實際上是<model_name>_set,它只會在some_user<model_name>之間存在定義的外鍵關係時才起作用。

UPDATE:

你似乎有關於Django的車型有些誤會。 some_B_object.box將是User類型的對象。所以,如果我剛剛從B得到A,那麼你應該可以做到value.box.a_set.all()

+0

不幸的是項目不是我的用戶表中的列,這就是爲什麼我堅持做什麼..我有2個類通過用戶錶鏈接。所以B - > USER < - A,所以理論上我應該可以從B訪問A ..對吧? – asaji 2012-02-18 07:40:22

+0

@asaji請參閱編輯 – Endophage 2012-02-18 07:45:50

+0

該語法是否可以直接在模板中使用? – asaji 2012-02-18 07:48:29

0

正確的方式做到這一點是在你的車型related_name如

class Item(models.Model): 
    user = models.ForeignKey('auth.User', related_name='items') 

class Box(models.Model): 
    user = models.ForeignKey('auth.User', related_name='boxes') 

然後,如果你有一個用戶對象,你可以做

user.items.all() 

user.boxes.all() 

如果一個項目只能涉及到一個盒子,那麼我會用Item.box外鍵替換Item.user字段。