Django 1.4 TimeField 迁移在 PostgreSQL 上失败

标签 django postgresql django-models django-south django-1.4

我在一个模型上编辑了两个字段,并将它们从 IntegerField 更改为 TimeField:

class Model(models.Model):
    start_time = models.TimeField()
    end_time = models.TimeField()

我使用这两个字段来保存天真的时间,它与任何地理时间概念无关,因此没有真正的“时区”(想想类似于比赛时间的东西)。我的本地数据库是 PostgreSQL。

但是,由此更改生成的南迁移失败并出现以下错误:

> main:0005_auto__chg_field_model_start_time__chg_field_model_end_time
FATAL ERROR - The following SQL query failed: ALTER TABLE "main_model" ALTER COLUMN "start_time" TYPE time, ALTER COLUMN "start_time" SET NOT NULL, ALTER COLUMN "start_time" DROP DEFAULT;

...

File ".../lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 52, in execute
    return self.cursor.execute(query, args)
django.db.utils.DatabaseError: column "start_time" cannot be cast to type time without time zone

失败的迁移是这样的:

class Migration(SchemaMigration):

    def forwards(self, orm):

        # Changing field 'Model.start_time'
        db.alter_column('main_model', 'start_time', self.gf('django.db.models.fields.TimeField')())

        # Changing field 'Model.end_time'
        db.alter_column('main_model', 'end_time', self.gf('django.db.models.fields.TimeField')())

关于如何让 postgres 对这次迁移感到满意有什么想法吗?

附言我正在开发中,所以我真的不关心任何数据迁移。您可能会假设数据库是空的。

最佳答案

由于您不关心数据,最简单的方法是删除该列,然后使用 Time 类型再次添加它。

手动编辑当前迁移来执行此操作。或者删除此迁移,然后注释该字段并运行 schemamigration --auto 然后添加该字段并再次运行。

关于Django 1.4 TimeField 迁移在 PostgreSQL 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10921921/

相关文章:

Django更新和保存异步?

python - 根据行的日期字段用上周日注释 Django 查询集

SQL - 检查列表中的值是否在表中不存在并相应地返回 bool 值

database - 将具有空值的大型 CSV 数据集添加到 postgres 数据库

python - Django:如何将外键检查设置为 0

python - Django 性能 |在 Django 中更新模型后重新计算所有相关模型中的字段值

python - 运行函数时导入的模块变为 None

django - 如何使用基于类的 View 按 Django 中相关字段的总和进行排序?

python - 如何在 Django 中过滤类别

Postgresql 9.2 pg_dump 版本不匹配