Django South - 将CharField更改为ForeignKey

时间:2012-09-26 15:18:41

标签: django django-models django-south

我目前有这样的设置。

#models.py
class Donate(model.Model):
             item_locations = models.CharField(max_length=150)
#forms.py
    ItemChoices = (('item1','item1'),('item2','item2'),('item3','item3'))
    class DonateForm(ModelForm):
         item_locations = CharField(choices=ItemChoices)
         class Meta:
              model = Donate

我想将item_locations更改为ForeignKey,让用户可以自己更改项目列表。我创建了另一个名为ItemLocations的类,并将其更改为

item_locations = models.ForeignKey(ItemLocation)

如何使数据库保留以前的记录? Donor1的项目位置为“Item1”,如何在将数据更改为外键后将其保存为“item_location_id”?

此外,这是否像南迁一样简单?我的DB是MySql。

./manage.py schemamigration donate --auto

1 个答案:

答案 0 :(得分:3)

最简单的方法是:

  1. 添加新的外键列。
  2. 使用get_or_create
  3. 迁移数据
  4. 删除旧列。
  5. 您可以通过预先计算事物并使用update查询来加快速度。