2012-01-30 49 views
0

我知道要选择一个相关的对象应该做object.related_set.all()。然而在我的情况下,这产生了一个AttributeError,所以很难调试。下面是设置:在Django中通过外键选择相关字段

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' 

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

+0

谢谢你们。应该抓住那个。 – 2012-01-30 22:17:49

回答

1

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

1

这与“从camelcase翻译”无关。

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

act.Action.all() 

其实,那related_name值没有意义。你应该删除它,然后原来的fielddiff_set将工作。