2010-11-14 197 views
5

我有一個django項目,它有兩個應用程序,一個是AppAAppB。現在AppA具有使用在我看來modelA = models.ForeignKey(ModelA, related_name='tricky')Django反向查找ForeignKey

現在對於AppA這是由模型ModelBAppB引用的模型 ModelA,當它顯示ModelA,我做了get_object_or_404(ModelA, pk=prim_id)。然後我想要獲得所有ModelB的外鍵指向ModelA

文檔說我應該做一個mb = ModelB.objects.get(pk=prim_id)然後mb.modela_set.all()

但是,它沒有對mb.modela_set,和它說"ModelB object has no attribute 'suchsuch'"。注意我將related_name字段添加到了ForeignKey中,所以我也試過了,包括mb.tricky.all()mb.tricky_set.all()都無濟於事。

呵呵,我已經爲AppA指定了一個不同的管理器,其中我做的是objects = MyManager(),它返回正常查詢但應用了過濾器。

可能是什麼問題? ModelB參考ModelA的首選方法是什麼?

+0

啊,我搞砸了,應該叫ModelA.tricky.all()來讓modelbs引用ModelA ...而不是我所擁有的是ModelB.tricky.all()Gah。 – rapadura 2010-11-14 23:21:31

+0

如果你認爲你描述了你的問題,請修改它是正確的。你也可以包含你的管理員代碼! – 2010-11-14 23:32:19

+0

@lazerscience,那我說得很對。 – rapadura 2010-11-15 07:53:08

回答

4

如果ForeignKey是,當你在ModelB描述和你做mb = ModelB.objects.get(pk=prim_id)則彌補了modela屬性看看是不是反向查找。您只需通過mb.modela訪問相關對象!

+1

是的,但我試圖做ModelB.modela_set.all()來將modelB的引用引用到modelA。在http://docs.djangoproject.com/en/dev/topics/db/queries/(製作反向查詢)的文檔中,我沒有注意到ModelA(文檔中的Blog)沒有將ForeignKey字段賦予另一個模型。相反,它是ModelA(博客),其中包含來自另一個模型的所有引用的FOO_set.all()。虐待接受你的答案,因爲它仍然是正確的,併爲別人找到答案。 – rapadura 2010-11-15 07:58:21