Ait*_*tch 7 mysql django migrate django-south
使用django-south,是否可以在不应用所有先前迁移的情况下将表设置为最近的最新配置?
我们感兴趣的是使用第三方工具(django-activity-stream),但是由于某些未知的原因(可能是关于特定字段的MySQL问题)而难以运行所有迁移 - 特别是迁移003,这会引发错误
_mysql_exceptions.OperationalError:(1170,"没有密钥长度的密钥规范中使用的BLOB/TEXT列'object_id')"我强烈怀疑避免迁移并直接进入当前模式将避免这种情况.
不需要向后迁移的能力,只需要立即将我们带到当前架构,并且我不想破解程序包来处理这个问题.我似乎无法建立命令,或者这是否可能?
配置:
南0.7.6,django 1.3.x,mysql 5.5.x,django-activity-stream 0.4.4
小智 4
actstream出现此错误的原因是处理通用外键的方式。MySql 出现问题是因为它看到没有指定任何长度的文本字段。
可以通过将迁移 0003 设为无操作来修复此错误。
在 actstream 的migrations0003_text_field_ids中更改以下内容:0004_char_field_ids
0003_text_field_ids.py:
def forwards(self, orm), def backwards(self, orm)然后将pass两者都写入即可。TextFieldPositiveIntegerField0004_char_field_ids.py:
def backwards(self, orm),TextField改为PositiveIntegerField全部db.altercolumns()。这使得迁移 0003 成为使用向前和向后传递的 noop,并使模型的定义用于PositiveIntegerFields通用外键,因此它们保持与迁移 0001 离开时相同的状态。PositiveIntegerFields这样做,迁移 0004 可以从到进行迁移varChars。然后修复更改迁移 0004,因此向后迁移更改PositiveIntegerFields为而不是TextFields。
这有望解决您的问题。