Django通过ForeignKey进行反向查找

6 投票
1 回答
7860 浏览
提问于 2025-04-16 07:04

我有一个django项目,里面有两个应用,一个叫做 AppA,另一个叫做 AppB。现在,AppA 里有一个模型 ModelA,而 AppB 里的模型 ModelB 是通过外键引用了 ModelA,具体写法是 modelA = models.ForeignKey(ModelA, related_name='tricky')

在我的 AppA 的视图中,当我显示 ModelA 的时候,我会用 get_object_or_404(ModelA, pk=prim_id) 来获取这个对象。然后,我想要获取所有指向这个 ModelAModelB 对象。

文档上说我应该先用 mb = ModelB.objects.get(pk=prim_id) 来获取一个 ModelB 对象,然后再用 mb.modela_set.all() 来获取相关的 ModelB 对象。

但是,执行 mb.modela_set 的时候出错了,提示 "ModelB object has no attribute 'suchsuch'"。注意到我在外键中添加了 related_name 字段,所以我也尝试用这个来获取,包括 mb.tricky.all()mb.tricky_set.all(),但都没有成功。

哦,还有,我为 AppA 指定了一个不同的管理器,写成 objects = MyManager(),这个管理器返回正常的查询结果,但会加上一些过滤条件。

那可能是什么问题呢?获取指向 ModelAModelB 对象的推荐方法是什么呢?

1 个回答

5

如果你在ModelB里有一个ForeignKey,然后你执行mb = ModelB.objects.get(pk=prim_id)这行代码,那么查找modela这个属性并不是反向查找。你只需要通过mb.modela直接访问相关的对象就可以了!

撰写回答