假设我正在尝试插入一个名为tag的新char字段,我希望它位于现有表的中间。
在django中,当我添加字段并进行迁移时,它总是将新字段添加到sql表的末尾。
我无法在迁移文件中编辑任何内容,因为它只添加了一个字段:
operations = [
migrations.AddField(
model_name='chat',
name='tags',
field=models.CharField(blank=True, max_length=100, null=True),
)
无论如何我可以在django中自定义订单吗?或者我必须去sql手动完成它。
答案 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;