Django 通过 ForeignKey 反向查找
Posted
技术标签:
【中文标题】Django 通过 ForeignKey 反向查找【英文标题】:Django reverse lookup by ForeignKey 【发布时间】:2011-05-09 23:17:00 【问题描述】:我有一个 django 项目,它有两个应用程序,一个是 AppA
和 AppB
。现在AppA
有模特
ModelA
被模型ModelB
在AppB
中引用,使用modelA = models.ForeignKey(ModelA, related_name='tricky')
现在在我看来 AppA
,当它显示 ModelA
时,我执行 get_object_or_404(ModelA, pk=prim_id)
。然后我想获取所有具有指向ModelA
的外键的ModelB
s。
文档说我应该做一个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
s 引用ModelA
的首选方法是什么?
【问题讨论】:
啊,我搞砸了,应该调用 ModelA.tricky.all() 来让 modelbs 引用 ModelA ...而不是 ModelB.tricky.all() Gah。 如果您认为您的问题描述有误,请将其修改为正确的。您还可以包含您的经理代码! @lazerscience,不,我描述的没错。 【参考方案1】:如果ForeignKey
是,正如您在ModelB
中描述的那样,并且您执行mb = ModelB.objects.get(pk=prim_id)
,那么查找modela
属性不是反向查找。您只需通过mb.modela
访问相关对象!
【讨论】:
是的,但我试图做 ModelB.modela_set.all() 来获取 modelB 对 modelA 的引用。我在docs.djangoproject.com/en/dev/topics/db/queries(进行反向查询)的文档中没有注意到 ModelA(文档中的博客)没有指向另一个模型的 ForeignKey 字段。相反,它是 ModelA(博客),它有一个 FOO_set.all() 来自另一个模型的所有引用。我会接受你的答案,因为它仍然是正确的并且可以让其他人找到。以上是关于Django 通过 ForeignKey 反向查找的主要内容,如果未能解决你的问题,请参考以下文章
如何在 DJango 管理界面中显示 ForeignKey 反向查找列表?