【问题标题】:How do I fix table x has no column named y?如何修复表 x 没有名为 y 的列?
【发布时间】:2012-05-21 06:04:09
【问题描述】:

我在 django 中编辑了一个模型,结果出现错误:“table reserve_time has no column named reservation”对于以下模型:

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 之后,但我仍然得到上述错误。有想法该怎么解决这个吗?如果我删除“预订”字段,它工作正常。在管理员中,出现“预订”的文本框,但当我尝试保存时出现错误。

【问题讨论】:

    标签: python django model


    【解决方案1】:

    这里的问题是,当您进行字段更改时,django 不会做任何事情来修复您的表。 syncdb 所做的只是创建尚不存在的表。如果您决定更改架构并添加字段,则需要在数据库中手动创建它们,或者删除表并让 syncdb 重新创建它,或者开始使用像 South 这样的项目来处理数据库迁移。

    这不起作用的原因是因为理论上您已经在表中拥有现有记录,并且没有确定的方法可以知道您如何处理所有这些缺失的字段。也许这些字段不能为空。也许他们还有其他必须满足的限制条件。显然 South 可以应付这种情况。

    更新(2019 年 12 月)

    自从我使用 django 已经 7 年多了,但现在似乎数据库迁移功能已被集成为一流的概念: https://docs.djangoproject.com/en/3.0/topics/migrations/

    【讨论】:

    • South 已弃用。没有南你有什么想法吗
    • @Tessaracter 我已经有 7 年没有使用 django 了,但我只是在谷歌上搜索了数据库迁移,发现他们现在将它作为一等支持。我已经更新了答案。
    【解决方案2】:

    Syncdb 不会按 dbwise 更改现有模型。一种可能性是手动编辑您的数据库,或从您的数据库中删除模型并再次运行syncdb(不应该在没有适当备份的生产环境中完成)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多