2016-01-22 40 views
1

我收到此錯誤的Django的模型:Django的給神祕的錯誤爲外鍵

ProgrammingError at /admin/notifications/eventtoken/ column notifications_eventtoken.user_id does not exist LINE 1: ...ications_eventtoken" INNER JOIN "users_user" ON ("notificat... ^ HINT: Perhaps you meant to reference the column "notifications_eventtoken.used_at".

我添加了用戶這樣一個外鍵:

class EventToken(models.Model): 
    token = models.CharField(max_length=255, db_index=True) 
    user = models.ForeignKey(User, null=False, blank=False) 
    used_at = models.DateTimeField(null=True, blank=True) 
    event = models.ForeignKey(Event) 

它的工作原理,當我刪除用戶字段,但除此之外,我不能告訴錯誤信息。

+0

您可以添加完整的錯誤堆棧跟蹤嗎? –

+0

您是否在添加新的'user'字段後運行遷移?即您的數據庫表是否與您的模型保持同步? –

回答

2

它在我刪除用戶字段時起作用。

這是因爲您的數據庫缺少您在EventToken類中編寫的列,我猜的是在notifications/models.py之內。這就是爲什麼它被稱爲ProgrammingError

有幾種方法來解決這個問題:

再次刪除您的整個數據庫和同步吧!不建議用於生產中的任何東西,但對於測試項目而言,確實不會造成太大的傷害。

2.使用像southdjango migrate app工具(取決於Django的您正在使用的版本)來自動使用manage.py腳本將表添加到您的數據庫。編輯:這個解決方案是最可行的,因爲在多個開發環境中工作時,它是快速的並遵循DRY原則。

3a。使用命令行工具手動進入數據庫並添加缺少的列。如果我沒有說清楚...你說「我想將user_id外鍵保存在這張表中」,而你的表格回覆說「沒有地方可以保存這個ID」......)

3B。使用數據庫GUI(如pgAdmin的PostgreSQL的)和user_id列添加到您的notifications_eventtoken數據庫表。

4. 刪除在EventToken類用戶現場! 不要做到這一點,但瞭解它的工作原理,因爲它清除了邏輯差異。

+1

建議選項2在這裏是您想要查看的選項,因爲它將具有其他好處並防止將來發生類似問題。 – ChidG