在Django中通过外键选择相关字段

时间:2012-01-30 22:00:02

标签: python django

我知道要选择一个应该做object.related_set.all()的相关对象。但在我的情况下,这会产生一个AttributeError,因此调试起来非常困难。这是设置:

class Action(models.Model):
    ...

class FieldDiff(models.Model):
    action = models.ForeignKey(Action, editable=False, related_name='Action')

在一个shell中:

In [16]: act = Action.objects.get(pk=34)
In [17]: act.fielddiff_set.all()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)

/home/ipantuyev/progs/ccc_app/<ipython console> in <module>()

AttributeError: 'Action' object has no attribute 'fielddiff_set'

我想这与camelcase的翻译有关。我可以解决这个问题,但是这个代码会从模板中调用,所以我宁愿没有额外的逻辑。

2 个答案:

答案 0 :(得分:2)

这是因为您指定related_nameAction。这意味着您希望通过FieldDiff访问与Action相关联的所有Action_set个实例。由于看起来这不是您想要的,最简单的解决方案是删除related_name参数。

答案 1 :(得分:1)

这与来自camelcase&#34;的翻译无关。

您已为ForeignKey提供了明确的related_name属性。这是Django用来提供反向关系的名称。所以你的查询应该是:

act.Action.all()

实际上,related_name值没有意义。你应该删除它,然后原始的fielddiff_set就可以了。