如果我在模型字段上更改空值和空值,是否需要进行迁移?

时间:2017-04-21 10:41:10

标签: python django django-models

我有以下型号

@python_2_unicode_compatible
class Booking(models.Model):
    session = models.ForeignKey(verbose_name=_('Session'), to=Session, default=None, null=False, blank=False)
    quantity = models.PositiveIntegerField(verbose_name=_('Quantity'), default=1, null=False, blank=False)
    price = models.DecimalField(verbose_name=_('Price'), max_digits=10, decimal_places=2,
                                default=None, null=False, blank=False)
    name = models.CharField(verbose_name=_('Name'), max_length=100, default=None, null=False, blank=False)
    email = models.EmailField(verbose_name=_('Email'), default=None, null=True, blank=True)
    phone_number = models.CharField(verbose_name=_('Phone Number'), max_length=30, default=None, null=True, blank=True)

说我需要更改我的电子邮件和phone_number字段。我希望他们拥有null=Falseblank=False。这些改动是否需要新的迁移?

4 个答案:

答案 0 :(得分:4)

是的,他们这样做。 null=False需要更改数据库架构本身; blank=False没有,但Django无论如何都需要迁移,以便迁移运行者的模型状态的内部图是最新的。

答案 1 :(得分:4)

不确定。要检查它,您可以运行python manage.py makemigrations --dry-run(--dry-run不会保存新的迁移文件,但会显示是否有必要)

答案 2 :(得分:1)

当然可以。您对模型字段所做的每项更改(从简单地更改help_text到完全重命名模型字段)都需要makemigrationsmigrate才能在将来重建您的模型。

答案 3 :(得分:1)

https://docs.djangoproject.com/en/1.11/topics/db/models/#field-options

Django文件说:

  

     

如果为True,Django会将空值存储为数据库中的NULL。默认>为假。

     

空白

     

如果为True,则允许该字段为空。默认值为False。

     

请注意,这与null不同。 null纯粹与数据库相关,   而空白与验证有关。如果字段为空= True,则表单   验证将允许输入空值。如果字段为空= False,   该领域将是必需的。

要更改null,您需要迁移

对于blank中的更改,您无需迁移,因为其管理员表单相关