【问题标题】:How do I fix a migration error I'm getting with South?如何解决我在使用 South 时遇到的迁移错误?
【发布时间】:2012-09-18 04:58:33
【问题描述】:

我尝试将以下模型中的字段从 CharField 更改为 ForeignKey,但在运行迁移时出现错误。我得到的错误是:

致命错误 - 以下 SQL 查询失败:CREATE INDEX "reserve_reviewbackup_fbfc09f1" ON "reserve_reviewbackup" ("user_id"); 错误是:索引reserve_reviewbackup_fbfc09f1 已经存在 !在实际运行迁移过程中发现错误!中止。

!由于您有一个不支持运行的数据库 !事务中的模式改变语句,我们有 !使其在迁移之间处于临时状态。

class Reviewbackup(models.Model):
    review = models.CharField('Review', max_length = 2000)
    user = models.CharField('Username', max_length =  200)
    rating = models.IntegerField(max_length=2, choices=RATING_OPTIONS)
    product = models.ForeignKey(Productbackup)
    def __unicode__(self):
        return self.review

user = models.ForeignKey(User, related_name='reviews')

【问题讨论】:

  • 在同一版本中出现同样的错误(将字段类型从 CharField 更改为 ForeignKey 而不更改其名称),对我来说听起来像是一个错误。 (南 0.7.6)
  • 为了完成与 South 的描述更改,我使用了两个步骤:1)第一次迁移,我更改了字段的类型和名称(名称设置为临时值) 2)我更改的第二次迁移字段的名称恢复为原始名称(临时名称丢弃)。当然,South 已经把我的 Sqlite DB 弄得无法修复了……让我们以此为一个很好的教训,在迁移之前始终转储所有 DB 内容:python manage.py dumpdata > savemyass.json
  • 修改前后的代码可以写吗?

标签: django view model foreign-keys django-south


【解决方案1】:

我以前做过。只需从数据库管理员手动删除索引,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 2023-03-16
    • 1970-01-01
    • 2015-06-20
    • 2017-08-31
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多