当我尝试运行./manage.py migrate my_app
时,我收到此错误:
django.db.utils.ProgrammingError:列“关联”无法自动转换为类型整数
提示:指定USING表达式以执行转换。
这听起来很棒,但我不知道 South 希望我做什么。我应该手动编辑自动生成的python迁移文件吗?如果是这样,我怎么样 - 我没有看到该文件中的标准SQL。相反,我看到了这一点:
# Changing field 'MyTable.associated'
db.alter_column(u'data_mytable', 'associated',
self.gf('django.db.models.fields.IntegerField')()
)
另外,为什么没有 South 选择并自动添加USING
子句?
答案 0 :(得分:7)
这是我的肮脏黑客:
migrations.RemoveField(
model_name='name_of_the_model',
name='offending_field',
)
2.然后我将抱怨迁移的操作从AlterField更改为AddField,即
migrations.AddField(
model_name='name_of_model',
name='name_of_field',
field=models.ForeignKey(blank=True, null=True, to='ForeignKeyModel'),
preserve_default=False,
),
```
答案 1 :(得分:2)
您必须将原始db.alter_column
替换为db.execute
:
# Changing field 'MyTable.associated'
# db.alter_column(u'data_mytable', 'associated',
# self.gf('django.db.models.fields.IntegerField')()
# )
db.execute(
'ALTER TABLE "data_mytable" '
'ALTER COLUMN "associated" DROP DEFAULT, '
'ALTER COLUMN "associated" DROP NOT NULL, '
'ALTER COLUMN "associated" TYPE INTEGER '
'USING '
'CASE '
' WHEN FALSE THEN 0 ELSE 1 '
'END'
)
当然,WHEN
条件可能会因associated
原始类型而发生变化
另请参阅此link。