在Django中将模型字段插入现有模型字段的中间

时间:2016-04-21 19:12:52

标签: django django-models

假设我正在尝试插入一个名为tag的新char字段,我希望它位于现有表的中间。

在django中,当我添加字段并进行迁移时,它总是将新字段添加到sql表的末尾。

我无法在迁移文件中编辑任何内容,因为它只添加了一个字段:

operations = [
        migrations.AddField(
            model_name='chat',
            name='tags',
            field=models.CharField(blank=True, max_length=100, null=True),
        )

无论如何我可以在django中自定义订单吗?或者我必须去sql手动完成它。

3 个答案:

答案 0 :(得分:0)

不,在没有创建新表的情况下,您无法在其他列之间插入列。但我无法弄清楚有特定顺序的列(模型字段)的原因,它没有意义。实际上,我真的怀疑是否有任何sql语句可以直接重新排序数据库模式的列序列。

答案 1 :(得分:0)

正如你猜对了,这需要一些可以用RunSQL执行的自定义sql。这意味着您需要编辑生成的迁移文件,如下所示:

operations = [
    migrations.RunSQL(
      "ALTER TABLE musician ADD COLUMN name varchar(255) NOT NULL;",
      state_operations = [
        migrations.AddField(
           model_name='chat',
           name='tags',
           field=models.CharField(blank=True, max_length=100, null=True),
        )
     ]
]

答案 2 :(得分:0)

王尚:“我真的怀疑有任何sql语句可以直接重新排序数据库模式的列顺序。” 你完全错了!

ALTER TABLE CoreDB.country CHANGE column_to_move AFTER column_name_to_move_after;