元数据:指的是除了字段以外的所有内容,这些内容不是必须的。
在Django ORM中实现元数据的定义只需要在模型类中添加一个Meta子类即可,然后就可以在该子类下增加各种元数据选项了。
下面列举出常用的元数据选项:
class Books(models.Model):
"""图书类"""
name = models.CharField(max_length=20)
price = models.PositiveSmallIntegerField()
word_num = models.PositiveIntegerField()
class Meta:
abstract = True # 当该参数设置为True时表示该模型类是一个基类,提供给其他模型类继承,因此该基类不会在数据库中生成数据表。
app_label = "app_name" # 该参数是用于当我们没有在INSTALLED_APPS中注册app时,需要用该参数来说明该模型类属于哪个app。
db_table = "books" # 该参数表示该模型类在数据库中生成的数据表的表名。
get_latest_by = "price" # 该参数定义了当我们使用latest()和earliest()方法时是通过什么字段来进行排序的。
managed = True # 该参数默认值为True,表示Django将按照既定的规则,管理数据库表的生命周期。如果设置为False,将不会针对当前模型创建和删除数据库表.
ordering = ["price"] # 该参数表示按照什么字段排序,目前表示按照price升序排序,如需要降序,则在字段名前加一个负号["-price"],同时可以添加多个排序选项,如["price", "word_num"]表示先按照price升序排序,然后price相同的再按照word_num升序排序。
permissions = (("allow_update", "允许更新图书"),) # 该参数用于当创建对象时增加额外的权限。它接收一个所有元素都是二元元组的列表或元组,每个元素都是(权限代码, 直观的权限名称)的格式
indexes = [models.Index(fields=['name', 'price']), ] # 该参数表示要在模型上定义的索引列表,用于在数据库中创建索引。
unique_together = (("name", "price"),) # 该参数表示联合唯一约束,参数值可以是一维的,也可以是二维的,我这里是用二维的举例,当前表示该表中不能出现name和price都相同的书籍出现,该参数可以设置多组联合唯一约束,另外,如果约束只有一组的情况下可以用一维表示。
verbose_name = "图书" # 该参数可以设置模型直观的名称,一般我们设置为中文,如果不设置,那么Django会默认使用小写的模型名。
verbose_name_plural = verbose_name # 该参数是verbose_name的复数形式,由于中文没有复数的概念,所以一般verbose_name_plural = verbose_name。
这里只列举出了部分常用的元数据,其他没有列举出来的都是使用频率相当少的,可以到Django官网查看所有的元数据选项。
参考来源于:Django官方文档(https://docs.djangoproject.com/zh-hans/2.1/ref/models/options/)和刘江的博客教程(http://www.liujiangblog.com/course/django/99)