Django通过ForeignKey进行反向查找
我有一个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)
来获取这个对象。然后,我想要获取所有指向这个 ModelA
的 ModelB
对象。
文档上说我应该先用 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()
,这个管理器返回正常的查询结果,但会加上一些过滤条件。
那可能是什么问题呢?获取指向 ModelA
的 ModelB
对象的推荐方法是什么呢?
1 个回答
如果你在ModelB
里有一个ForeignKey
,然后你执行mb = ModelB.objects.get(pk=prim_id)
这行代码,那么查找modela
这个属性并不是反向查找。你只需要通过mb.modela
直接访问相关的对象就可以了!