2016-04-21 135 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), 
     ) 
    ] 
]