在Django中将CharField转换为Choice Field(PositiveSmallIntegerField)

时间:2016-07-28 22:00:12

标签: python django

我当前的模型设置如下:

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的名称?

1 个答案:

答案 0 :(得分:1)

没有Django模型ChoiceField?

我认为您可以在不丢失任何数据的情况下为CharField添加“选择”。见https://docs.djangoproject.com/en/1.9/ref/models/fields/#choices

但是,如果要将字段类型更改为“PositiveIntegerField”,则必须执行多个步骤。

  1. 添加一个PositiveIntegerField来模拟选择
  2. 编写数据迁移..将数据从旧字段复制到新字段
  3. 删除旧字段。
  4. 关于Django迁移的文档:https://docs.djangoproject.com/en/1.9/ref/django-admin/#makemigrations

    希望这有帮助。