2016-07-28 61 views
3

我現在的模型設置如下:在Django轉換CharField到選擇欄(PositiveSmallIntegerField)

Class MyClass(models.Model): 
    my_field = models.CharField(max_length=100,...) 

所有值要麼是爲了討論,"foo""bar"的緣故。

我想轉換這是一個PositiveSmallIntegerField,而不是與以下設置:

Class MyClass(models.Model): 
    FOO = 0 
    BAR = 1 
    FOO_BAR_CHOICES = (
     (FOO, 'foo') 
     (BAR, 'bar') 
    ) 
    my_field = models.PositiveSmallIntegerField(choices=FOO_BAR_CHOICES,...) 

有沒有,我可以轉換舊my_field CharField是一個PositiveSmallIntegerField,並保持我所有的舊數據進行任何方式?或者,我必須爲模型添加一個新字段,通過針對舊字段運行腳本來填充值,刪除舊字段,然後將我的PositiveSmallIntegerField重命名爲舊CharField的名稱?

+2

您需要進行數據遷移,因爲您要更改數據庫中的數據表示。 – wim

回答

1

有沒有Django模型ChoiceField?

我認爲你可以添加'選擇'到你的CharField而不會丟失任何數據。請參閱https://docs.djangoproject.com/en/1.9/ref/models/fields/#choices

但是,如果要將字段類型更改爲'PositiveIntegerField',則必須分多步執行。

  1. 添加PositiveIntegerField模型瓦特/選擇
  2. 寫數據遷移。要數據從舊字段複製到新的領域
  3. 刪除舊場。

Google文檔Django的遷移:https://docs.djangoproject.com/en/1.9/ref/django-admin/#makemigrations

希望這有助於。

+0

謝謝,這正是我所假設的我必須做的。只是想看看有沒有人有更好的辦法。 – Nwilson