2016-04-21 105 views
0

假设我试图插入一个名为tag的新字段,并且我希望它位于现有表的中间。将模型字段插入Django中现有的模型字段

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

我不能编辑迁移文件或者任何东西,因为它只是增加一个字段:

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

反正我有可以自定义Django的顺序?或者我必须去sql来手动完成。

回答

0

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

+0

因为我负责的一个表有很多列,我要上传与像查询值的功能:插入值(%S ,%s,........%s)。我计算col的数量以找出需要插入查询的多少%。最后一个col是我生成的外键。其余的是我从其他地方收到的数据。现在数据的源在中间有一个额外的列,如果我可以在我的数据库中间插入一列,那么这将非常容易 – viviwill

+0

但是,插入到'还是不得不指定列名像'insert into(col1,col2 ...)values(v1,v2)'?你是否管理sql语句?你准确接收了什么? SQL语句或数据?我很困惑。 –

+0

不是。您可以插入值而不指定列名。 INSERT INTO table_name VALUES(1,2,3,4,5);所以这个顺序真的很重要。 – viviwill

0

正如你正确的猜测这将需要一点点的定制SQL可以执行RunSQL。这意味着你需要编辑生成的迁移文件,如下所示:

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), 
     ) 
    ] 
]