7

使用 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") "我强烈怀疑避免迁移并直接进入当前模式将避免这种情况。

不需要向后迁移的能力,只需要让我们立即进入当前模式,我不想破解包来处理这个问题。我似乎无法建立命令,或者这是否可能?

配置:

南 0.7.6,django 1.3.x,mysql 5.5.x,django-activity-stream 0.4.4

4

2 回答 2

4

actstream由于处理其通用外键的方式而出现此错误。MySql 出现问题是因为它看到没有指定任何长度的文本字段。

可以通过将迁移 0003 设为无操作来修复此错误。

在 actstream中更改 migrations 中的以下内容0003_text_field_ids0004_char_field_ids

0003_text_field_ids.py:

  1. 删除中的所有内容 def forwards(self, orm)def backwards(self, orm)然后将两者都写入pass
  2. 更改TextFieldPositiveIntegerField

0004_char_field_ids.py:

  1. def backwards(self, orm),全部更改TextFieldPositiveIntegerFielddb.altercolumns()

这使得迁移 0003 成为使用前向和后向传递的 noop,并使模型的定义PositiveIntegerFields用于通用外键,因此它们保持与迁移 0001 离开它们时相同的状态。PositiveIntegerFields这样做,migration 0004 可以从to拾取varChars。然后修复更改迁移 0004,因此向后迁移更改为PositiveIntegerFields而不是TextFields.

这应该有望解决您的问题。

于 2012-11-30T05:40:42.330 回答
2

我不认为问题是由迁移引起的,甚至syncdb会给你同样的结果。

出现错误是因为 MySQL 只能索引 BLOB 或 TEXT 列的前 N ​​个字符。因此,您必须有一个 TEXT 或 BLOB 的字段/列类型,您试图将其作为主键或索引。

对于没有长度值的完整 BLOB 或 TEXT,MySQL 将无法保证列的唯一性,因为它具有可变和动态大小。因此,当使用 BLOB 或 TEXT 类型作为索引时,必须提供 N 的值,以便 MySQL 可以确定键长度。

尝试解决此问题,然后尝试应用迁移,它应该可以正常工作。是的,您可以应用任何迁移并跳过较旧的迁移,但我建议不要这样做,因为这不是应该使用南的方式。

希望我把事情说清楚了。

于 2012-09-24T11:21:35.463 回答