2011-06-20 47 views
1

我試圖按照文檔查找跨越「反向」關係的關係,找到here。這裏是我的模型代碼:Django「跨越關係的查找」錯誤

class Foo(models.Model): 
    initiator = models.ForeignKey(User) 
    date_time = models.DateTimeField() 
    ... 

,這裏是我的查詢代碼:

... 
now = datetime.now() 
users = User.objects.filter(foo__date_time__gte = now) 
... 

這將導致以下錯誤:django.core.exceptions.FieldError:無法解析的關鍵字「富」成領域。選項包括:_message_set,date_joined,電子郵件,FIRST_NAME,組ID,IS_ACTIVE,is_staff,is_superuser,LAST_LOGIN,姓氏,logentry,密碼,user_permissions,用戶名

但是,如果我改變我的代碼,不使用的用戶,但而是使用我自己的模型類型Bar,然後按我所期望的那樣工作,沒有任何錯誤。示例如下:

class Foo(models.Model): 
    initiator = models.ForeignKey(Bar) 
    date_time = models.DateTimeField() 
    ... 

... 
now = datetime.now() 
bars = Bar.objects.filter(foo__date_time__gte = now) 
... 

任何人都可以向我解釋第一個代碼使用用戶模型作爲外鍵的問題嗎?提前致謝!

編輯:我應該說明我的查詢代碼不是在視圖函數中,而是在我使用manage.py命令調用的效用函數中。如果我把查詢代碼放在視圖中,那麼一切正常,沒有錯誤!但奇怪的是,第二個代碼示例在視圖和管理命令場景中都能正常工作。

希望有人比我有更多的Django專業知識可以解釋這一點。謝謝!

+0

您是否已將'Foo'定義的應用程序添加到'INSTALLED_APPS'中? –

+0

感謝您的回覆Daniel。是的,我的應用程序在INSTALLED_APPS。我編輯了我原來的帖子,以澄清這段代碼不在視圖函數內,這似乎有所作爲,雖然我不太清楚爲什麼。 – Blade

回答

3

好的,問題解決了!這似乎是一個令人難以置信的細節導致這個問題,我不能說我完全理解爲什麼它表現得像它那樣,但是這裏有:

我有from django.contrib.auth.admin import UserAdmin在我的models.py的頂部與我的其他進口報表。這實際上是在將我的管理員重構爲自己的admin.py之前剩下的,因此UserAdmin導入在models.py中根本沒有被使用。我註釋掉了這個未使用的語句,然後做了一個syncdb,並在反向查詢名稱上發生了模型驗證錯誤(這是在我的用戶配置文件模型中的ForeignKey字段中,但不是我在原始問題中無法查詢的模型)。所以我給這個字段添加了一個related_name參數,做了一個syncdb,執行了我之前提供錯誤的原始查詢,並且所有的工作都沒有錯誤!

所以最終它歸結爲一個錯誤from django.contrib.auth.admin import UserAdmin

非常感謝所有迴應幫助的人!