mysql - 无法安装 django-activity-stream 数据库表

标签 mysql django django-south migrate

使用 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_ids0004_char_field_ids 中更改以下内容:

0003_text_field_ids.py:

  1. 删除def forwards(self, orm)def backwards(self, orm) 中的所有内容,并在两者中都写上pass
  2. TextField 更改为 PositiveIntegerField

0004_char_field_ids.py:

  1. def backwards(self, orm) 中,将所有 db.altercolumns() 中的 TextField 更改为 PositiveIntegerField >.

这使得 migration 0003 成为一个 noop,使用 pass 进行向前和向后,并使模型的定义使用 PositiveIntegerFields 作为通用外键,因此它们保持与 migration 0001 离开时相同的状态。这样做,迁移 0004 可以从 PositiveIntegerFieldsvarChars。然后修复更改迁移 0004,因此向后迁移更改为 PositiveIntegerFields 而不是 TextFields

这有望解决您的问题。

关于mysql - 无法安装 django-activity-stream 数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11983232/

相关文章:

django - 使用 Outlook SMTP 发送电子邮件

python - 如何从 Django 项目中删除南方

mysql - 确定 CentOS 6 Apache 服务器运行缓慢的问题

python - 如何使用Python迭代Mysql数据库查询?

python - 使用 docker,ALLOWED_HOSTS 部署 django 应用程序

django - “讨厌的 “Table ' my_table'已经存在”在Django-South中

django - 将 Django 模型迁移到 unique_together 约束

php - 如何连接四个表来显示具体数据

php - 高效的 ajax 查询多位信息

python - Django rest framework 一对一关系