Django:blank=True 和 default="" 之间的区别
Django: Difference between blank=True and default=""
声明模型时,有很多关于 null
与 blank
争论的问题(这个问题与此无关)!
但是如果我用 default=""
标记 django.db.models.CharField
和 blank=True
有什么区别?
我觉得是同一个概念?
Field.null
如果 True,Django 将在数据库中将空值存储为 NULL。默认值为 False。
避免在 CharField 或 TextField
中使用 null
Field.blank
如果 True,该字段允许为空。默认为 False.
注意: 这与 null 不同。 null 纯粹与数据库相关,其中 blank 是 validation-related.
空白参数和默认参数不可互换。最终的交互会有所不同,具体取决于您使用的组合。例如,
some_field = models.CharField(default='', max_length=20)
...将不允许您在未将数据输入 some_field 的情况下 保存模型实例 。在这种情况下,默认的空字符串只允许您在迁移时将该字段添加到模型中,因为您还不允许使用 null=True.
some_field = models.CharField(blank=True, default='', max_length=20)
...将在没有数据的情况下保存,因为 blank=True。
另一种表达方式是您的 default='' 允许 non-nullable 字段存在,而 blank=True 允许您的 non-nullable 字段在没有数据输入的情况下保存()。如果您尝试迁移以下内容:
some_field = models.CharField(max_length=20)
...您将收到以下错误:
You are trying to add a non-nullable field 'some_string' to YourModelName without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
...因为没有默认值的 non-nullable 字段不能存在于数据库中,但是 blank=True 字段可以。注意,我在这里说的是 PostgeSQL。这可能适用于也可能不适用于 any/every 其他数据库。
声明模型时,有很多关于 null
与 blank
争论的问题(这个问题与此无关)!
但是如果我用 default=""
标记 django.db.models.CharField
和 blank=True
有什么区别?
我觉得是同一个概念?
Field.null 如果 True,Django 将在数据库中将空值存储为 NULL。默认值为 False。 避免在 CharField 或 TextField
中使用 nullField.blank 如果 True,该字段允许为空。默认为 False.
注意: 这与 null 不同。 null 纯粹与数据库相关,其中 blank 是 validation-related.
空白参数和默认参数不可互换。最终的交互会有所不同,具体取决于您使用的组合。例如,
some_field = models.CharField(default='', max_length=20)
...将不允许您在未将数据输入 some_field 的情况下 保存模型实例 。在这种情况下,默认的空字符串只允许您在迁移时将该字段添加到模型中,因为您还不允许使用 null=True.
some_field = models.CharField(blank=True, default='', max_length=20)
...将在没有数据的情况下保存,因为 blank=True。
另一种表达方式是您的 default='' 允许 non-nullable 字段存在,而 blank=True 允许您的 non-nullable 字段在没有数据输入的情况下保存()。如果您尝试迁移以下内容:
some_field = models.CharField(max_length=20)
...您将收到以下错误:
You are trying to add a non-nullable field 'some_string' to YourModelName without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
...因为没有默认值的 non-nullable 字段不能存在于数据库中,但是 blank=True 字段可以。注意,我在这里说的是 PostgeSQL。这可能适用于也可能不适用于 any/every 其他数据库。