Django模型之字段公共属性及模型元类属性

前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

字段公共属性

null

如果该值为True,将在数据库中将控制存储为NULL

字符串字段CharFieldTextField要避免使用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字段来充当主键,该值可以用pkid方式获取。主键的设置还意味着,null=Falseunique=True


unique

如果该值为True,代表这个数据在当前的表中有唯一值

这个字段还会在模型层验证存储的数据是否唯一

unique的设置也意味着当前字段具备索引的创建

  • 注意ManyToManyFieldOneToOneFieldFileField字段不可以使用该属性

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"以表复数

设置表的复数名称

猜你喜欢

转载自blog.csdn.net/HeroicLee/article/details/121382529
今日推荐