【发布时间】:2013-01-06 19:12:21
【问题描述】:
我改变了我的模型
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(当前最新)。
有什么建议吗?
【问题讨论】:
标签: django django-south migrate