django框架中常见Meta类属性有哪些-创新互联
这篇文章主要介绍django框架中常见Meta类属性有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
具体如下:
Django models是Django框架自定义的一套独特的ORM技术。
使用该层开发的首要任务就是定义模型类以及属性。每个模型都可以被映射为数据库中的一个数据表,而类属性被映射为为数据字段。
from django.db import models class ModelName(models.Model): field1 = models.xxfield(..) field2 = models.xxfield(..) ... class Meta: db_table = ... other_metas = ...
所有Django的模型继承自django.db.models.Model
通过模型类中额Meta子类定义模型元数据,比如数据库名、数据默认排序方式等,Meta类的属性名有Django预定义。
常见Meta类属性汇总如下:
1.abstract
这个属性是定义当前的模型是不是一个抽象类。所谓抽象类是不会对应数据库表的。一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段。
Options.abstract
如果abstract = True
这个model就是一个抽象类
2.app_label
这个选型只在一种情况下使用,就是你的模型不在默认的应用程序包下的models.py文件中,这时候需要指定你这个模型是哪个应用程序的。
Options.app_label
如果一个model定义在默认的models.py,例如如果你的app的models在myapp.models子模块下,你必须定义app_label让Django知道它属于哪一个app
app_label = 'myapp'
3.db_table
db_table是指定自定义数据库表名的。Django有一套默认的按照一定规则生成数据模型对应的数据库表明。
Options.db_table
定义该model在数据库中的表名称
db_table = 'Students'
如果你想使用自定义的表名,可以通过以下该属性
table_name = 'my_owner_table'
4.db_teblespace
Options.db_teblespace
定义这个model所使用的数据库表空间。如果在项目的settin中定义那么它会使用这个值
5.get_latest_by
Options.get_latest_by
在model中指定一个DateField或者DateTimeField。这个设置让你在使用model的Manager上的lastest方法时,默认使用指定字段来排序
6.managed
Options.managed
默认值为True,这意味着Django可以使用syncdb和reset命令来创建或移除对应的数据库。默认值为True,如果你不希望这么做,可以把manage的值设置为False
7.order_with_respect_to
这个选项一般用于多对多的关系中,它指向一个关联对象,就是说关联对象找到这个对象后它是经过排序的。指定这个属性后你会得到一个get_xxx_order()
和set_xxx_order()
的方法,通过它们你可以设置或者回去排序的对象
8.ordering
这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的。这是一个字符串的元组或列表,没有一个字符串都是一个字段和用一个可选的表明降序的'-'构成。当字段名前面没有'-'时,将默认使用升序排列。使用'?'将会随机排列
ordering=['order_date'] # 按订单升序排列 ordering=['-order_date'] # 按订单降序排列,-表示降序 ordering=['?order_date'] # 随机排序,?表示随机 ordering=['-pub_date','author'] # 以pub_date为降序,在以author升序排列
9.permissions
permissions主要是为了在Django Admin管理模块下使用的,如果你设置了这个属性可以让指定的方法权限描述更清晰可读。Django自动为每个设置了admin的对象创建添加,删除和修改的权限。
permissions = (('can_deliver_pizzas','Can deliver pizzas'))
10.proxy
这是为了实现代理模型使用的,如果proxy = True
,表示model是其父的代理 model
11.unique_together
unique_together这个选项用于:当你需要通过两个字段保持唯一性时使用。比如假设你希望,一个Person的FirstName和LastName两者的组合必须是唯一的,那么需要这样设置:
unique_together = (("first_name", "last_name"),)
一个ManyToManyField不能包含在unique_together中。如果你需要验证关联到ManyToManyField字段的唯一验证,尝试使用signal(信号)或者明确指定through属性。
12.verbose_name
verbose_name的意思很简单,就是给你的模型类起一个更可读的名字一般定义为中文,我们:
verbose_name = "学校"
13.verbose_name_plural
这个选项是指定,模型的复数形式是什么,比如:
verbose_name_plural = "学校"
如果不指定Django会自动在模型名称后加一个's'
模型层普通字段类型:
普通字段是指模型类中除了外键关系外的数据字段属性,用于定义数据库中模型字段类型、定义标签类型显示模型字段以及定义表单数据验证HTML,所有的字段的属性继承自抽象类django.db.models.Field
。
1、models.AutoField ---自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
2、models.CharField ---字符串字段 单行输入,用于较短的字符串,如要保存大量文本, 使用 TextField。必须 max_length 参数,django会根据这个参数在数据库层和校验层限制该字段所允许的大字符数。
3、models.BooleanField ---布尔类型=tinyint(1) 不能为空,Blank=True
4、models.ComaSeparatedIntegerField ---用逗号分割的数字=varchar 继承CharField,所以必须 max_lenght 参数,
5、models.DateField ---日期类型 date 对于参数,auto_now = True
则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、models.DateTimeField ---日期类型 datetime 同DateField的参数
7、models.Decimal ---十进制小数类型 = decimal 必须指定整数位max_digits和小数位decimal_places
8、models.EmailField ---字符串类型(正则表达式邮箱) =varchar 对字符串进行正则表达式 一个带有检查 Email 合法性的 CharField,不接受 maxlength 参数。
9、models.FloatField ---浮点类型 = double 浮点型字段。 必须提供两个 参数, 参数描述:
max_digits:总位数(不包括小数点和符号)
decimal_places:小数位数。如:要保存大值为 999 (小数点后保存2位),你要这样定义字段:models.FloatField(…,max_digits=5, decimal_places=2),要保存大值一百万(小数点后保存10位)的话,你要这样定义:models.FloatField(…,max_digits=19, decimal_places=10)
10、models.IntegerField ---整形 用于保存一个整数
11、models.BigIntegerField ---长整形
integer_field_ranges = { 'SmallIntegerField': (-32768, 32767), 'IntegerField': (-2147483648, 2147483647), 'BigIntegerField': (-9223372036854775808, 9223372036854775807), 'PositiveSmallIntegerField': (0, 32767), 'PositiveIntegerField': (0, 2147483647), }
12、models.IPAddressField ---字符串类型(ip4正则表达式) 一个字符串形式的 IP 地址, (如 “202.1241.30″)。
13、models.GenericIPAddressField ---字符串类型(ip4和ip6是可选的) 参数protocol可以是:both、ipv4、ipv6 验证时,会根据设置报错
14、models.NullBooleanField ---允许为空的布尔类型 类似 BooleanField, 不过允许 NULL 作为其中一个选项。 推荐使用这个字段而不要用 BooleanField 加 null=True 选项。 admin 用一个选择框