2012-01-30 35 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將工作。