2

我改变了我的模型

class HardwareModel(models.Model):
    name = models.CharField(max_length=128,unique=True)
    series =models.CharField(max_length=128)
    def __unicode__(self):
        return "%s" % (self.name)

class HardwareModel(models.Model):
    name = models.CharField(max_length=128,unique=True)
    series = models.ForeignKey(HardwareModelSeries, blank=True)
    def __unicode__(self):
        return "%s" % (self.name)

我用南方迁移。(使用 --auto 所以迁移脚本是由南制作的)

    # Renaming column for 'HardwareModel.series' to match new field type.
    db.rename_column('iamictinfra_hardwaremodel', 'series', 'series_id')
    # Changing field 'HardwareModel.series'
    db.alter_column('iamictinfra_hardwaremodel', 'series_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['iamictinfra.HardwareModelSeries']))
    # Adding index on 'HardwareModel', fields ['series']
    db.create_index('iamictinfra_hardwaremodel', ['series_id'])

现在在创建一个全新的 sqllite 数据库时(在测试期间),它给出了这个错误:

south DEBUG execute "CREATE INDEX "iamictinfra_hardwaremodel_b18a98d" ON "iamictinfra_hardwaremodel" ("series_id");" with params "[]"
FATAL ERROR - The following SQL query failed: CREATE INDEX "iamictinfra_hardwaremodel_b18a98d" ON "iamictinfra_hardwaremodel" ("series_id");
The error was: index iamictinfra_hardwaremodel_b18a98d already exists

现在我可以删除创建索引命令,但我不确定它是否可以在生产服务器(mySql)上运行。

另一种选择可能是更改脚本并删除列,并使其而不是更改它......但是,我还有很多迁移......我认为在旧迁移中搞砸有点棘手...... ..我试图用try catch来捕捉它......

也可能是该脚本是使用较旧的南方版本制作的......并且在较新的版本中,索引也在更改列时被重命名......而在旧版本中它不是......

我正在使用南 0.7.6(当前最新)。

有什么建议么?

4

2 回答 2

0

你可能已经想通了,如果是这样,你能发布你的解决方案吗?

我自己也有同样的问题。我通过删除索引创建行来解决它。迁移在生产中成功(mysql)。

在源代码中查看后,似乎更改操作已经自动为 fk 创建索引,所以我认为 create_index 是不必要的。

于 2013-07-18T13:41:48.387 回答
0

@Mariodev 很抱歉让您失望,我没有找到任何解决方案。

由于 sqlite 不被南方开发社区视为 django 的真正数据库选项......它看起来在不久的将来没有任何解决方案。也许这里所说的有点复杂,我认为这也与在开发服务器(runserver)上运行它而不是真实的东西有关。

就我而言,sqlite 数据库只是我的开发和测试数据库(生产在 mySQL 上运行)

mySql中没有出现问题

所以我的“解决方案”是删除 sqlite 数据库(幸运的是,我使用固定装置来填充新的开发数据库)并做一个新的 syncdb 并迁移。

确保您使用固定装置,或使用转储命令备份数据库,这样您就可以重新开始......

于 2013-07-23T09:44:47.050 回答