【问题标题】:Django reverse lookup by ForeignKeyDjango 通过 ForeignKey 反向查找
【发布时间】:2011-05-09 23:17:00
【问题描述】:

我有一个 django 项目,它有两个应用程序,一个是 AppAAppB。现在AppA有模特 ModelA 被模型ModelBAppB 中引用,使用modelA = models.ForeignKey(ModelA, related_name='tricky')

现在在我看来 AppA,当它显示 ModelA 时,我执行 get_object_or_404(ModelA, pk=prim_id)。然后我想获取所有具有指向ModelA 的外键的ModelBs。

文档说我应该做一个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(),它返回正常查询但应用了过滤器。

可能是什么问题?让ModelBs 引用ModelA 的首选方法是什么?

【问题讨论】:

  • 啊,我搞砸了,应该调用 ModelA.tricky.all() 来让 modelbs 引用 ModelA ...而不是 ModelB.tricky.all() Gah。
  • 如果您认为您的问题描述有误,请将其修改为正确的。您还可以包含您的经理代码!
  • @lazerscience,不,我描述的没错。

标签: python django model django-queryset


【解决方案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() 来自另一个模型的所有引用。我会接受你的答案,因为它仍然是正确的并且可以让其他人找到。
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 2023-03-08
  • 2022-01-22
  • 2011-10-01
  • 2014-02-16
相关资源
最近更新 更多