前言
这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题
于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。
微信小程序搜索:Python面试宝典
或可关注原创个人博客:https://lienze.tech
也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习
字段公共属性
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=1,choices=CHAR_CHOICE)
choices
字段也支持分类的写法
CHAR_CHOICE = [
('A',
(
('H',"Hard"),
)
),
('B',
(
('M',"Medium"),
)
),
…
]
分类的名称作为元组中的第一个值,元组的第二个值为该分类下的一个新的二元组序列数据
db_column
数据库中用来表示该字段的名称,如果未指定,那么Django将会使用Field
名作为字段名
db_index
当该值为True
时,为该字段创建索引
default
该字段默认值,可以是一个值或是一个回调函数
当是一个函数对象时,在创建新对象时,函数调用
editable
如果设置该值为False,那么这个字段将不允许被编辑
不会出现在admin后台界面下,以及其他ModelForm表单中,同时也会跳过模型验证
primary_key
设置该值为True
时,该字段成为模型的主键字段,一个模型类同时只能有一个主键
如果一个表中不存在任意一个设置好的主键字段,django会自动设置一个自增的AutoField
字段来充当主键,该值可以用pk
,id
方式获取。主键的设置还意味着,null=False
,unique=True
unique
如果该值为True,代表这个数据在当前的表中有唯一值
这个字段还会在模型层验证存储的数据是否唯一
unique的设置也意味着当前字段具备索引的创建
- 注意:
ManyToManyField
、OneToOneField
与FileField
字段不可以使用该属性
verbose_name
对于字段的一个可读性更高的名称
如果没有设置该值,字段名中的下换线转换成空格,作为当前字段的数据库中名称
模型元属性
在模型类的
Meta
类中,可以提供一系列的元选项,可以方便对该模型类进行属性设置或约束等
class TestTable(models.Model):
…
class Meta:
ordering = [Fields]
…
abstract
代表当前模型类为抽象基类,不会创建真正的数据表,只是为了其他模型类继承使用
abstract = True
app_label
当模型类被定义在了其他app下,这个属性用来描述当前表属于哪个app应用
app_label = "MyApp"
db_table
当前模型类所对应的表名,未设置时,django默认将表名与app名由下划线组成,作为表名
需要注意这个表名为真实在数据库中所使用的,所以该元选项的使用应在数据表创建之前
如果在表已经存在的情况下去修改,会导致数据库内表与模型类表名不一致而查找不到报错
ordering
当前表中的数据存储时的排序规则,这是一个字段名的字符串,可以是一个列表或元组;
每一个字符串前可以使用"
-
“来倒序排序,使用”?
"随机排序ordering排序规则的添加,也会增加数据库的开销
ordering = ['-birthday', 'age']
#先按照birthday倒序排序,再按照age字段进行排序。
unique_together
用来设置表中的不重复字段组合
格式为一个元组,元组中的每个数据都是一个元组,用来描述不重复的组合字段
如果只处理单一字段组合,可以是一个一维的元组
联合约束
unique_together = (('name','phone'),)
verbose_name
一般设置该表展示时所用的名称,名称被自动处理为复数,字符串后加一个"s"
verbose_name_plural
与
verbose_name
功能相同,但是不会自动在字符串后加"s
"以表复数设置表的复数名称