当我们在Django中添加一个模型字段时,我们通常会写:
models.CharField(max_length=100, null=True, blank=True)ForeignKey、DecimalField等也是这样做的。两者之间的基本区别是:
null=Trueblank=Truenull=True和blank=True对于不同的(CharField,ForeignKey,ManyToManyField,DateTimeField)字段?使用备选方案1、2或3的优缺点是什么?
发布于 2022-07-24 04:00:22
Django模型中的每个选项都有两个目的
现在让我们回到null和blank
blank是与Django表单相关的。它用于验证admin或Django中的Django窗体。特别是当我们调用form.is_valid()时null与数据库相关.它告诉底层数据库该列是否允许保存null值。例如,让我们看看下面的例子-
class Company(models.Model):
name = models.CharField(max_length=100)
website = models.UrlField()
founded_on = models.DateField(blank=True, null=False)
random_date = models.DateFeild(blank=False, null=True)
random_text = models.TextField(null=True, blank=True)我已经定义了一个Company模型,它有两个字段,我们在其中使用blank和null选项。让我们看看不同的字段发生了什么
founded_on:可以在表单级别(框架/语言级别)接收空的string值。在保存到数据库时,我们将引发IntegrityError,因为数据库将不接受null值,因为null是false。random_date:通过验证错误在表单级别(框架)接收空值,因为由于在窗体级别设置约束的blank true,因此不允许空白。但是,它还允许列在数据库层是null。random_text:这是一个选项,它意味着允许将字段保存为数据库层的null,并且允许空的string值为有效数据,这是由于blank=True导致的Django窗体验证逻辑。因此,简而言之,它可以接收空值(在框架级别,并可以在DB级别存储空值)。要解决所有这些困惑,请考虑将数据库提交作为两层过程。
在这里,blank是框架级的东西,而null是数据库级的反差。
https://stackoverflow.com/questions/8609192
复制相似问题