模型类字段
模型类字段类型及特殊属性
在模型层类中的字段即是数据库中表的字段,表的字段设计非常重要
每一个字段都是Field
基类的一个实例(Field
类用来建立字段与数据库之间的映射)
模型字段定义不能以下划线结尾
django 会根据在模型类中定义的字段属性来确定以下几点工作
- 数据库中使用的数据类型
- 模型类对应的表单类渲染时使用的表单类型及
HTML
部件 - 必填字段等最低限度的验证要求检查,包括
admin
界面下自动生成的表单
BooleanField
True/False 字段,默认值为 None
BooleanField(**options)
- 表单类型:CheckboxInput,
<input type='checkbox' ...>
CharField
字符串字段
CharField(max_length=None)
# max_length 设置最大的字符数长度限制
- 表单类型:TextInput,
<input type="text" ...>
DateField
以
datetime.date
实例表示的日期
DateField(auto_now=False, auto_now_add=False,**options)
'''
auto_now: 该值为 True 时,每次在保存数据对象时,自动设置该字段为当前时间,也可以理解为自动更新最后一次修改时间
auto_now_add: 该值为 True 时,该字段设置在第一次数据对象创建时,可以记录当前字段创建的时间值
'''
- 注意:避免矛盾,
auto_now
,auto_now_add
,default
不能同时出现,一个字段属性只能有其中一条设置,当设置了auto_now
,或auto_now_add
时,也会让该字段默认具有blank=True
(字段可以为空)属性 - 表单类型:TextInput,
<input type="text" ...>
DatetimeField
以
datetime.datetime
实例表示的日期和时间
DatetimeField(auto_now=False, auto_now_add=False,**options)
# auto_now_add: 创时使用当前时间 注册时间
# auto_now: 修改时自动更新为当前时间 用户上次登陆,修改ip
# 和 DateField 具有相同的字段属性
DecimalField
以Decimal实例表示的十进制浮点数类型
DecimalField(max_digits=None,decimal_places=None, **options)
'''
max_digits: 位数总数,包括小数点后的位数,必须大于 decimal_places 参数
decimal_places: 小数点后的数字数量,精度
'''
- 表单类型:TextInput,
<input type="text" ...>
FloatField
使用
float
实例来表示的浮点数
FloatField(**options)
- 表单类型:TextInput,
<input type="text" ...>
IntegerField
一个整数,范围由
-2147483648
到2147483647
IntegerField(**options)
字段属性
字段通用属性
null
如果该值为True
,将在数据库中将控制存储为NULL
字符串字段CharField
与TextField
要避免使用null
,因为空值字符串将存储空字符串(“”),而不是null
值。
对于字符串类型的数据字段,大多数情况下,django
使用空字符串代表空值
blank
如果该值为True
,则在验证时该字段值可以为空;
null
为数据库存储层面可以为空,而blank
为表单验证层面可以填写空值
choices
一个二元组的列表或元组;
元组中第一个值为真正在数据库中存储的值,第二个值为该选项的描述
该值一旦被设定,表单样式会显示选择框,而不是标准的文本框,选择框内的选项为choices
中的元组
class TestTable(models.Model):
CHAR_CHOICE = [
('H',"非常苦难"),
('M',"中等难度"),
('S',"非常简单"),
]
choicechar = modesl.CharField(max_length