2012-05-21 66 views
2

我在Django編輯的模型,結果我得到的錯誤:「表reserve_time沒有指定的列預約」爲如下機型:我該如何修復表x沒有列名爲y的列?

from django.db import models 
import datetime 

class Club(models.Model): 
    establishment = models.CharField(max_length=200) 
    address = models.CharField(max_length=200) 
    def __unicode__(self): 
     return self.establishment 

class Day(models.Model): 
    club = models.ForeignKey(Club) 
    day = models.DateField('day') 
    def __unicode__(self): 
     return unicode(self.day) 

class Court(models.Model): 
    club = models.ForeignKey(Club) 
    day = models.ForeignKey(Day) 
    court = models.IntegerField(max_length=200) 
    def __unicode__(self): 
     return unicode(self.court) 

class Time(models.Model): 
    club = models.ForeignKey(Club) 
    day = models.ForeignKey(Day) 
    court = models.ForeignKey(Court) 
    time = models.TimeField('time') 
    reservation = models.CharField(max_length=200) 
    def __unicode__(self): 
     return unicode(self.time) 

我跑蟒蛇manage.py執行syncdb和python manage.py runserver後,但我仍然得到上述錯誤。有想法該怎麼解決這個嗎?如果我刪除「保留」字段,它工作正常。在管理員中,出現「保留」的文本框,但是當我嘗試保存時出現錯誤。

回答

8

這裏的問題是,當你進行字段更改時,django將不會執行任何操作來修復表格。所有syncdb將做的是創建不存在的表。如果您決定更改模式並添加字段,則需要在數據庫中手動創建它們,或者刪除表並讓syncdb重新創建它,或者開始使用像South這樣的項目來處理數據庫遷移。

這不能工作的原因是因爲你理論上已經在表中存在記錄,並且沒有辦法知道你如何處理所有這些缺失的字段。也許這些字段不能爲空。也許他們有其他必須滿足的約束條件。 South顯然可以處理這種情況。

+0

+1使用南。 –

0

Syncdb不會更改現有模型dbwise。一種可能是手動編輯數據庫,或從數據庫中刪除模型並再次運行syncdb(不應在沒有正確備份的情況下在高效環境中完成)。

相關問題