2010-03-30 83 views
1

時,我有一個模型文件看起來類似於以下內容:FieldError註釋過的外鍵

class WithDate(models.Model): 
    addedDate = models.DateTimeField(auto_now_add=True) 
    modifiedDate = models.DateTimeField(auto_now=True) 

    class Meta: 
     abstract = True 

class Match(WithDate): 
    ... 

class MatchFilter(django_filters.FilterSet): 
    class Meta: 
     model = Match 

class Notify(WithDate): 
    matchId = models.ForeignKey(Match) 
    headline = models.CharField(null=True, blank=True, max_length=10) 

每場比賽我試圖得到通知有一個標題記錄的計數。所以我的電話看起來像

matchObjs = Match.objects.annotate(notifies_made=Count('notify__headline__isnull')) 

這不斷拋出一個FieldError。我已經簡化了查詢到

matchObjs = Match.objects.annotate(notifies_made=Count('notify')) 

我仍然會得到相同的FieldError ......我見過在其他情況下,這項工作(其他文件,其他等問題,如this one),但我不明白爲什麼我得到一個錯誤。

返回的特定錯誤如下:

Cannot resolve keyword 'notify' into field. Choices are: (all fields from Match model)

有沒有人有一個線索,爲什麼我不能得到這個註釋跨表的工作?看到其他的SO問題以及我看到完成的各種Django文檔後,我感到困惑不解。

編輯:我使用Django 1.1.1

編輯2:我已經試過重新命名matchId場只是比賽......我已經消除了WithDate類,添加在addedDate和modifiedDate直進入模型類定義。這些更改都沒有擺脫錯誤消息。

編輯3:一塊重建我的模型文件片之後,我認識亞歷克斯Gaynor的Django的過濾插件的加入是造成問題。我一開始並不認爲這是相關的,但是現在它已經包含了導致錯誤的Match FilterSet類。當我刪除MatchFilter類時,它工作得很好。我試圖通過django過濾器代碼來弄清楚爲什麼會發生這種情況,但如果有其他人有想法,我會非常感興趣!

+0

它與您的問題無關,但在MatchFilter中存在縮進錯誤。 – 2010-03-31 14:44:07

+0

哎呀,文本框傳輸的代碼沒有像我想的那樣乾淨利落。感謝您指出了這一點。現在應該修復! – 2010-03-31 15:00:35

回答

0

看來,問題的MatchFilter正在在models.py文件的通知模型之前定義。一旦我重新整理文件,如下所示...

class WithDate(models.Model): 
    addedDate = models.DateTimeField(auto_now_add=True) 
    modifiedDate = models.DateTimeField(auto_now=True) 

    class Meta: 
     abstract = True 

class Match(WithDate): 
    ... 

class Notify(WithDate): 
    matchId = models.ForeignKey(Match) 
    headline = models.CharField(null=True, blank=True, max_length=10) 

class MatchFilter(django_filters.FilterSet): 
    class Meta: 
     model = Match 

我不再收到FieldError。

0

成反向關係的默認名稱爲MODELNAME _set,所以你應該嘗試:

matchObjs = Match.objects.annotate(notifies_made=Count('notify_set')) 

或更好,添加related name到田間地頭聲明,然後用你寫的查詢:

matchId = models.ForeignKey(Match, related_name='notify') 
+0

它仍然給我一個FieldError:「無法解析關鍵字'notify_set'到字段中。」錯誤。當我嘗試添加related_name參數並僅使用「notify」時,情況也是如此。 – 2010-03-31 12:29:15