Python-在django中区分null=True,blank=True

发布于 2021-02-02 23:19:01

当我们在Django中添加数据库字段时,通常会这样写:

models.CharField(max_length=100, null=True, blank=True)

同样是与做ForeignKeyDecimalField等有什么根本区别在其

  1. null=True only
  2. blank=True only
  3. null=True, blank=True
    在相对于不同的(CharField,ForeignKey,ManyToManyField,DateTimeField)字段。使用1/2/3有什么优点/缺点?
关注者
0
被浏览
115
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    null=True在数据库的列中设置NULL(与相对NOT NULL)。Django字段类型(例如DateTimeField或)的空白值ForeignKey将存储NULL在数据库中。

    blank确定是否需要表单中的字段。这包括管理员和你的自定义表单。如果blank=True是,则不需要该字段,而如果是,则False该字段不能为空。

    两者的组合是如此频繁,因为通常如果你要允许表单中的字段为空白,则还需要数据库来允许NULL该字段的值。CharFieldsTextFields 是例外,在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
    

    CHARTEXT类型永远不会NULL被Django 保存,因此null=True没有必要。但是,你可以手动设置这些字段之一None以强制将其设置为NULL。如果



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看