为什么django 1.7会为字段选择中的更改创建迁移?

时间:2014-10-02 00:09:45

标签: django migration django-migrations

我在版本1.7上观察到了这种行为,但在以前的版本中没有使用南迁移。

例如。

class RedemptionCode(models.Model):
    EXPIRE_OPTIONS = (
        ('1 week', '1 Week'),
    )

    expire_option = models.CharField(max_length=255, choices=EXPIRE_OPTIONS)

当我添加更多选项时:

EXPIRE_OPTIONS = (
    ('1 week', '1 Week'),
    ('2 weeks', '2 Weeks'),
    ('1 month', '1 Month'),
    ('1 day', '1 Day'),
)

并运行makemigrations,它会为south后台创建一个迁移,我认为它应该说未检测到任何更改,因为它不会影响数据库架构。我不知道它的用途是什么:

class Migration(migrations.Migration):

    dependencies = [
        ('credits', '0001_initial'),
    ]

    operations = [
        migrations.AlterField(
            model_name='redemptioncode',
            name='expire_option',
            field=models.CharField(max_length=255, choices=[('1 week', '1 Week'), ('2 weeks', '2 Weeks'), ('1 month', '1 Month'), ('1 day', '1 Day')]),
        ),
    ]

2 个答案:

答案 0 :(得分:30)

提起票并因重复而关闭后,终于找到了答案:

  

这是设计的。有几个原因,尤其是对我来说,历史中的点数据需要完全准确地表示模型,包括所有选项,而不仅仅是那些影响数据库的选项。

参考:

答案 1 :(得分:0)

来自Django文档:

Django将为模型或字段的任何更改(甚至是不影响数据库的选项)进行迁移,因为它可以正确地重构字段的唯一方法是在历史记录中包含所有更改,因此您可能需要稍后在某些数据迁移中使用这些选项(例如,如果您设置了自定义验证器)。

参考: