Django小技巧08: Blank or Null

翻译整理自: simpleisbetterthancomplex.com

Django Model API 中提供了blanknull两个参数, 非常容易混淆。当我第一次使用 Django 的时候, 总是不能恰当的使用这两个参数。

看起来两者都做了几乎相同的事情, 但是这两者还是有区别的:

  • null: 数据库相关; 定义数据库字段的值是否接受空值。
  • blank: 验证相关, 当调用form.is_valid()时, 将会判断值是否为空.

虽然两者的是有区别的, 但一个拥有null=Trueblank=False的字段是完全没有问题的。 在数据库级别上, 该字段可以为 NULL, 但在应用程序级别上, 它是必填字段(前提你通过 Django 标准的 Form 进行判断)。

大多数开发人员都对基于字符串的字段(CharFieldTextField)定义null=True, 这其实是没有必要的, 应该避免这样做,因为 Django约定使用空字符串设置空值, 而非Null.

所以, 如果你想设置一个基于字符的字段可以为空,那么你应该这样做:

Python

class Person(models.Model):
    name = models.CharField(max_length=255)  # 强制填写
    bio = models.TextField(max_length=500, blank=True)  # 可选填写 (不要设置null=True)
    birth_date = models.DateField(null=True, blank=True) # 可选填写 (这里你应该设置null=True)

默认值

  • null: False
  • blank: False

NullBooleanField

当您需要为BooleanField字段设置允许为空时, 您应该使用NullBooleanField代替,而非通过参数.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏c#开发者

[原创]PipelineTools 文件传输工具

功能模块只有 1/文件目录-〉文件目录 2/文件目录-〉MSMQ 3/MSMQ-〉MSMQ 4/MSMQ -〉文件目录 在传输MSMQ是文件不能超过4M 下载文...

38070
来自专栏黑白安全

C++如何调用class类中方法实现多线程编程

众所周知在使用C++创建多线程执行时只能传递一个方法到thread模块中去创建线程执行。但是有时候我们往往需要使用多线程去执行某个对象中的方法,而对象中的方法却...

12920
来自专栏JetpropelledSnake

Python学习笔记之Python对象反射、类反射、模块反射

24540
来自专栏Janti

JVM活学活用——类加载机制

类的实例化过程 ---- 有父类的情况 1. 加载父类静态     1.1 为静态属性分配存储空间并赋初始值     1.2 执行静态初始化块和静态初始化...

41280
来自专栏积累沉淀

Python快速学习第十一天--Python多线程

Python中使用线程有三种方式: 方法一:函数式 调用thread模块中的start_new_thread()函数来产生新线程。语法如下: thread...

24190
来自专栏七夜安全博客

无线安全专题_破解篇03--打造个人字典

12840
来自专栏技术博客

Asp.Net Web API 2第六课——Web API路由和动作选择

      Asp.Net Web API第一课——入门http://www.cnblogs.com/aehyok/p/3432158.html

9620
来自专栏Python小屋

Python快速计算Fibonacci数列中第n项的方法

from time import time from functools import lru_cache def fibo1(n): '''递归法''' ...

33670
来自专栏Python小屋

Python编程常见出错信息及原因分析(1)

1.被0除错误 演示代码: >>> 2 / 0 Traceback (most recent call last): File "<pyshell#0>",...

31560
来自专栏cnblogs

knockout源码分析之computed(依赖属性)

一、序列图 ? 二、主要代码文件 1、dependentObservable.js:主要包含ko.computed相关方法的处理 2、dependencyDet...

21950

扫码关注云+社区

领取腾讯云代金券