2012-01-30 7 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') 

그리고 쉘 :

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

감사합니다. 그걸 잡았어야 했어. –

답변

1

related_nameAction으로 지정했기 때문입니다. 즉 Action에 연결된 FieldDiff 인스턴스를 모두 Action_set을 통해 액세스하려고합니다. 이것이 원하는 것이 아니기 때문에 가장 간단한 해결책은 related_name 매개 변수를 제거하는 것입니다.

1

"번역에서 camelcase"와 아무런 관련이 없습니다.

귀하는 ForeignKey에 명시적인 related_name 속성을 부여했습니다. 이것은 장고가 역방향 관계를 제공하기 위해 사용하는 이름입니다. 따라서 귀하의 질의는 다음과 같아야합니다 :

act.Action.all() 

사실, 그 related_name 값은 의미가 없습니다. 제거하면 원래 fielddiff_set이 작동합니다.

관련 문제