使用 django-south,是否可以在不应用所有之前的迁移的情况下仅将表设置为最后的、最新的配置?
我们对使用第 3 方工具 (django-activity-stream) 很感兴趣,但是由于一些未知的原因(可能是关于特定字段的 MySQL 问题)在运行所有迁移时遇到困难 - 特别是迁移 003,这会引发错误
_mysql_exceptions.OperationalError: (1170, "BLOB/TEXT column 'object_id' used in key specification without a key length") " I strongly suspect that avoiding the migrations and going straight to the current schema will avoid this.
不需要向后迁移的能力,现在只需要让我们进入当前模式,我不想破解包来处理这个。我似乎无法建立命令,或者这是否可能?
配置:
south 0.7.6,django 1.3.x,mysql 5.5.x,django-activity-stream 0.4.4
最佳答案
此错误是由于 actstream
处理其通用外键的方式造成的。问题出现在 MySql 中,因为它看到的文本字段没有任何
指定长度。
可以通过使迁移 0003 成为空操作来修复此错误。
在 actstream 中的 migrations 0003_text_field_ids
、0004_char_field_ids
中更改以下内容:
0003_text_field_ids.py:
- 删除
def forwards(self, orm)
、def backwards(self, orm)
中的所有内容,并在两者中都写上pass
。 - 将
TextField
更改为PositiveIntegerField
。
0004_char_field_ids.py:
- 在
def backwards(self, orm)
中,将所有db.altercolumns()
中的TextField
更改为PositiveIntegerField
>.
这使得 migration 0003 成为一个 noop,使用 pass 进行向前和向后,并使模型的定义使用 PositiveIntegerFields
作为通用外键,因此它们保持与 migration 0001 离开时相同的状态。这样做,迁移 0004 可以从 PositiveIntegerFields
到 varChars
。然后修复更改迁移 0004,因此向后迁移更改为 PositiveIntegerFields
而不是 TextFields
。
这有望解决您的问题。
关于mysql - 无法安装 django-activity-stream 数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11983232/