2017-04-21 38 views
2

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

@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

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

1

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

1

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

Django的文件说:

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

blank

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

请注意,这与null不同。 null与纯数据库相关, 而空白与验证相关。如果一个字段的空白值为True,则形式 验证将允许输入一个空值。如果一个字段有空白=假, 该字段将是必需的。

对于变化null需要迁移

对于改变你不需要迁移blank,因为其管理形式有关

3

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

+1

我不知道该命令选项,非常感谢!这将是非常有用的 – joaofguerreiro

相关问题