2012-11-28 81 views
0

我使用Dotcloud部署我的django應用程序。 我使用Postgres作爲數據庫。Dotcloud上的數據庫錯誤,Postgres Django

我有一個新的模型,我的應用程序,我想刷新和syncdb數據庫。當我做這件事時,一切都可以找到。我的新管理模型名爲「競爭」。

問題是,其他模型Match匹配了模型比賽的ForeignKey。當我在我的管理員的'匹配',我得到這個錯誤:

 DatabaseError at /admin/myproject/match/ 
    column myproject_match.competition_id does not exist 
    LINE 1: ...team_challenger_id", "sportdub_match"."sport_id", "sportdub_... 

任何想法爲什麼syncdb沒有使它的工作找到?

謝謝你的幫助。

編輯:我的兩個型號

 class Competition(models.Model): 
     name = models.CharField(max_length=256) 
     comp_pic = models.ImageField(upload_to="comp_pics/") 

     def __unicode__(self): 
      return self.name 


    class Match(models.Model): 
     team_host = models.ForeignKey(Team, related_name='host_matches') 
     team_challenger = models.ForeignKey(Team, related_name= 'challenger_matches') 
     sport = models.ForeignKey(Sport) 
     competition = models.ForeignKey(Competition) 
+0

你可以發佈你的兩個模型源代碼?你確定你運行了syncdb並且列/表在你的數據庫中嗎?你是否登錄數據庫來確認? –

+0

我編輯了我的問題。是的,我跑了syncdb。我認爲dotcloud會在我刷新它時自動執行此操作。我不知道列/表是否在我的數據庫中。我如何檢查? –

+0

而我的models.py中的更改完美地在本地運行 –

回答

1

manage.py syncdb只會造成失蹤表。如果一個表已經存在,但是具有無效的定義,它將不會被更新。這很可能是您遇到的問題。

至少有三種方法可以解決問題。

  1. 簡單的方法:使用manage.py reset有效地刪除+重新創建所有的表。容易,但當然你會失去數據。
  2. 懶惰的方式:安裝django_extensions並使用manage.py sqldiff。它會顯示數據庫當前結構和預期結構之間的差異。 sqldiff將很好地向您展示可以更新現有數據庫以符合您的模型的SQL語句。然後您可以在SQL shell中執行這些語句。
  3. 乾淨的方法:使用像south這樣的遷移框架來處理數據庫模式更新。當然,如果你在開發早期,這是過度的(你不希望每次在你進行本地開發的時候添加/更改/刪除字段,都要編寫數據庫遷移!),但是如果你的項目會有更長的時間壽命,我絕對推薦檢查south
+0

謝謝!第一個解決方案完美運作。唯一好奇的是,重置後,我沒有被要求創建一個超級用戶,舊的一直保持。所以我有一個錯誤'UserProfile匹配查詢不存在'。所以我在復位後做了沖洗。一切都可以找到。再次感謝你 –