2010-11-14 151 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