Tag: django-models

python – 在django中区分null = True,blank = True

当我 们在django中添加数据库字段时,我们通常会写models.CharField(max_length=100, null=True, blank=True)。同样是用ForeignKey,DecimalField等等。有什么基本的区别 null=True 只要 blank=True 只要 null=True, blank=True 在相对于不同的(CharField,ForeignKey,ManyToManyField,DateTimeField)字段。使用1/2/3有哪些优点/缺点? null=True在数据库中的列上设置NULL(对比NOT NULL)。Django字段类型的空值,例如DateTimeField或ForeignKey将存储NULL在DB中。 blank=True确定表单中是否需要该字段。这包括管理员和您自己的自定义表单。如果blank=True那时不需要该字段,而如果False该字段不能为空。 两者的组合非常频繁,因为通常如果您要允许表单中的字段为空,那么您还需要使用数据库来允许NULL该字段的值。例外是CharFields和TextFields,它们在Django中永远不会保存为NULL。空值作为空字符串('')存储在DB中。 几个例子: models.DateTimeField(blank=True) # raises IntegrityError if blank models.DateTimeField(null=True) # NULL allowed, but must be filled out in a form 显然,这两个选项在使用上没有逻辑意义(但是,null=True, blank=False如果您希望在表单中始终需要字段,则可能有一个用例,但在通过类似shell的方式处理对象时可选。) models.CharField(blank=True) # No problem, blank is stored as '' models.CharField(null=True) # NULL allowed, but will never be set as NULL CHAR并且TEXT类型永远不会NULL被Django 保存,因此null=True是不必要的。但是,您可以手动设置其中一个字段None以强制将其设置为NULL。如果你有一个可能需要的场景,你仍然应该包括null=True。 这就是Django