我在django中编辑了一个模型,结果我得到了错误:“table reserve_time没有名为reserved的列”,用于以下模型:
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)
我之后运行了python manage.py syncdb和python manage.py runserver,但我仍然遇到上述错误。有想法该怎么解决这个吗?如果我删除“预订”字段,它工作正常。在管理员中,出现“预订”的文本框,但是当我尝试保存时出现错误。
答案 0 :(得分:8)
这里的问题是当你进行字段更改时,django不会做任何事情来修复你的表。所有syncdb
都会创建尚不存在的表。如果您决定更改架构并添加字段,则需要在数据库中手动创建它们,或者删除表并让syncdb
重新创建它,或者开始使用像South这样的项目来处理数据库迁移。
这不起作用的原因是因为理论上你已经在表中有了现有的记录,并且没有确定的方法可以知道你对所有缺少的字段做了什么。也许这些字段不能为空。也许他们有其他必须满足的约束。显然南方可以处理这种情况。
答案 1 :(得分:0)
Syncdb不会改变现有模型dbwise。一种可能性是手动编辑数据库,或从数据库中删除模型并再次运行syncdb(不应在没有适当备份的高效环境中完成)。