• Django null=True和blank=True的区别


    今天遇到一个问题:

    在restframework框架中开发,数据库了创建了一个model的属性如下所示:

        remarks = models.CharField(verbose_name=u"描述", max_length=500, null=True)
    remarks为非必传数据,所以在serializer中没有加验证,当时觉得没什么问题,但在提交数据时remarks为空字符串,报错为‘验证失败,remarks不能为空’。但当remarks不传值时则没有报错。
    后来经过一番查找搜索,发现是没有加blank=True的原因。
    最终经过修改:
        remarks = models.CharField(verbose_name=u"描述", max_length=500, null=True, blank = True)

    再次提交,即使remark为空字符串,依然能提交成功。
    总结如下:

    1、serializer中没有加验证,所以remarks不传值时可以通过,切此时默认为null。这是null=True在起作用,null是和数据库相关的,当reamrks为空时,就会被存储为NULL。
    2、blank = True是页面表单验证相关的,表示在页面当中对应的表单可以为空,可以不填任何内容。

    blank

    
    

    设置为True时,字段可以为空。设置为False时,字段是必须填写的。字符型字段CharField和TextField是用空字符串来存储空值的。

    
    

    如果为True,字段允许为空,默认不允许。

    
    

    null

    
    

    设置为True时,django用Null来存储空值。日期型、时间型和数字型字段不接受空字符串。所以设置IntegerField,DateTimeField型字段可以为空时,需要将blank,null均设为True。

    
    

    如果为True,空值将会被存储为NULL,默认为False。

    
    

    如果想设置BooleanField为空时可以选用NullBooleanField型字段。

    
    

    一句话概括

    
    
    • null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空。
    • blank 是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填,比如 admin 界面下增加 model 一条记录的时候。直观的看到就是该字段不是粗体
    • 通俗点说,该字段null=true后,你进行插入,修改操作时可以为空,然后Django把空值转换成null存在数据库中,而blank只是在表单验证的时候会检测你是否可以为空


  • 相关阅读:
    Java RandomAccessFile与MappedByteBuffer
    Apache httpClient
    gitolite migration to bitbucket
    logback身份证脱敏
    身份证号码-正则表达式
    webservice-整理
    Java高编译低运行错误(ConcurrentHashMap.keySet)
    IIS(互联网信息服务)
    ASP.NET MVC:UrlHelper.cs
    TortoiseSVN 和 VisualSVN
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/12149475.html
Copyright © 2020-2023  润新知