django源码解析之 BooleanField (三)

1     def __init__(self, *args, **kwargs):
2         kwargs[‘blank‘] = True
3         if ‘default‘ not in kwargs and not kwargs.get(‘null‘):
4             kwargs[‘default‘] = False
5         Field.__init__(self, *args, **kwargs)

在看完 BooleanField 的 to_python 之后,我们来看看 __init__

先看看我从github上copy的一段代码

    login_required = models.BooleanField(
        _(‘login required‘), default=False,
        help_text=_(‘Only authenticated users can view the entry.‘))

这是一个非常常见的使用 BooleanField 示例。

我们继续看 __init__

首先,添加了 blank=True ,然后判断选项中是否设置了 default ,且未添加 null 属性

请看代码

>>> d = {}
>>> d.get(‘null‘) == True
False
>>> d = {‘null‘:1234}
>>> d.get(‘null‘) == True
False
>>> 

至于添加null后会出现什么情况,回头试试就知道了。

时间: 2024-10-25 16:24:56

django源码解析之 BooleanField (三)的相关文章

django源码解析之 BooleanField (二)

class BooleanField(Field): empty_strings_allowed = False default_error_messages = { 'invalid': _(u"'%s' value must be either True or False."), } description = _("Boolean (Either True or False)") def __init__(self, *args, **kwargs): kwa

mybatis源码-解析配置文件(三)之配置文件Configuration解析(超详细, 值得收藏)

1. 简介 1.1 系列内容 本系列文章讲解的是mybatis解析配置文件内部的逻辑, 即 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 其背后的逻辑. 1.2 适合对象 了解如何使用 mybatis 来访问数据库.可参看<

Django源码解析(1):启动程序

1.Django的启动 1.1.启动命令 在Django项目根目录执行启动命令,如下: python manage.py runserver 8008 1.2.执行manage.py manage.py源码: if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "middleware_demo.settings") try: from django.

django源码解析之BigIntegerField (一)

要分析django的源码,来更深入的学习django,是一个不错的方法,可惜需要大量的时间. 所以,能分析多少就是多少吧. 本次源码分析以1.4.16为基础. 用sublime 打开下载的源码,使用 Find in Folder,查找BigIntegerField 在其中可以看到这样的代码: 1 1005 def formfield(self, **kwargs): 2 1006: defaults = {'min_value': -BigIntegerField.MAX_BIGINT - 1,

Django源码解析:setting.py

1. setting.py文件 我们在django项目中,新建一个app的时候,都会有一个setting.py文件,里面包含了整个项目所有的配置,包括apps,中间键,数据库等等,django是如何将该setting文件利用起来的呢. 2. 从setting.py配置文件到Setting类 (1)启动的时候,指定默认的配置文件 django在启动的时候,会调用manage.py文件运行server的实例,在文件一开始的时候,manage.py会调用下面代码 os.environ.setdefau

深入理解 lambda表达式 与 Optional Null 源码解析(Java11 三)

import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.*; import java.util.function.Function; import java.util

android源码解析之(三)--&gt;HandlerThread

HandlerThread是个什么东西?查看类的定义时有这样一段话: Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called. 意思就是说:这个类的作用是创建一个包含looper的线程. 那么我们在什么时候需要用到它呢?加入在应用程序当中为了实现同时完成

django源码解析一(请求处理流程)

1.我们都知道WSGI是一个规范,规范了server和application之间通信的一些约束,server端在监听到请求之后,会把请求转给application去处理,他们之间关联起来的桥梁是一个env变量和一个start_response的回调函数,env用来初始化application的request请求,start_response方法用来将response返回给server. 2.每一个application都要实现一个__call__方法接收两个参数(environ, start_r

Android View体系(五)从源码解析View的事件分发机制

相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源码解析Scroller 前言 三年前写过事件分发机制的文章但是写的不是很好,所以重新再写一篇,关于事件分发机制的文章已经有很多,但是希望我这篇是最简洁.最易懂的一篇. 1.处理点击事件的方法 View的层级 我们知道View的结构是树形的结构,View可以放在ViewGroup中,这个ViewGro