Django ORM中的元数据Meta

元数据:指的是除了字段以外的所有内容,这些内容不是必须的。

在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

发布了49 篇原创文章 · 获赞 10 · 访问量 9236

猜你喜欢

转载自blog.csdn.net/heibuliuqiu_gk/article/details/103314770