我知道要选择一个应该做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的翻译有关。我可以解决这个问题,但是这个代码会从模板中调用,所以我宁愿没有额外的逻辑。
答案 0 :(得分:2)
这是因为您指定related_name
为Action
。这意味着您希望通过FieldDiff
访问与Action
相关联的所有Action_set
个实例。由于看起来这不是您想要的,最简单的解决方案是删除related_name
参数。
答案 1 :(得分:1)
这与来自camelcase&#34;的翻译无关。
您已为ForeignKey提供了明确的related_name
属性。这是Django用来提供反向关系的名称。所以你的查询应该是:
act.Action.all()
实际上,related_name值没有意义。你应该删除它,然后原始的fielddiff_set
就可以了。