django.db.models是django中很重要的一层,处理着数据和对象的交换!在我看来,如果有SQL基础,学习这就很容易,因为基本上models就是将sql不同类型封装成了不同的类。
django入门后都知道models中有很多Field,其中很多Field为我们提供了便捷的功能,但是对于其中的各类Field掌握还不是很全,比如当时写博客问文章的Slug使用的是CharField后来还是小邪兽提醒我使用SlugField。今天通读了所有的Field就此也整理下
AutoField
其实质是一个InterField,随着记录的增长自动增加,但是这个Field不需要我们太留心,因为如果你的models中没有primary key的时候就会自动添加一个AutoField
BigIntegerField/SmallIntegerField
整型。。根据文档描述,BigIntegerField能表示-9223372036854775808到 9223372036854775807的数。
BooleanField / NullBooleanField
布尔型,表示true or false 如果你希望他能够空,那么你需要用NullBooleanField
CharField
字符串,没有什么好说的,比较常用,但是有一个必须赋值的参数max_length表示最大长度
CommaSeparatedIntegerField
逗号分开的整形?实质是CharField,不是很理解
DateField/DateTimeField/TimeField
日期和时间,类似python标准库中的datetime.date,其中有两个可选参数需要注意,auto_now保存时自动使用当前时间,一般作为最后修改时间,auto_now_add新建对象时自动使用当前时间,一般作为创建时间!
DecimalField
小数?英语不行,表示没看懂。
EmailField
Email,本质应该是CharField加个验证Email的正则
FileField / FilePathField
文件和文件路径,这块比较复杂,改天单独研究
FloatField
浮点数,这个一般会和DecimalField混淆,但是本质是不同的一个使用python的float类型,一个使用的是Decimal
ImageField
一个特殊的FileField,拥有两个额外的属性height_field,width_field
IPAddressField
ip地址,这个真是比较特殊,以后省去自己判断,其中注意protocol默认是both也就是都接受,也可以单独设成’IPv4’或者’IPv6’表示只接受IPV4或者IPV6
PositiveIntegerField/PositiveSmallIntegerField
非负整型
SlugField
这个我特别喜欢,用来表示缩略表示内容,一般用来生成URL
TextField
我个人认为这个和CharField类似,不同的仅仅是在form中这个需要TextArea,CharField仅仅需要TextInput
URLField
URL,一般存储URL是django1.5中新加入的