Django 模型 Meta 选项详解

1. 了解Meta内部类

  • 每个模型类(Model)下都有一个子类 Meta,这个子类就是定义元数据的地方。
  • Meta 类封装了一些数据库的信息,称之为 Model 的元数据。
  • Django 会将 Meta 中的元数据选项定义附加到 Model 中。
  • 常见的元数据定义有 db_table(数据表名称)、abstract(抽象类) 、ordering(字段排序) 等,
  • Meta 作为内部类,它定义的元数据可以让admin 管理后台对人类更加友好,数据的可读性更高。

Meta 定义的元数据相当于 Model 的配置信息,即不属于 Model 的字段,但是可以用来标识字段一些属性。

2. Meta类选项

  • abstract:abstract = True   # 定义当前的模型是不是一个抽象类。True表示这个 model 就是一个抽象类
  • ordering:排序规则
    •   
      ordering=["add_time"] #按照升序排序
      ordering=["-add_time"]#按照降序
      ordering=["?add_time"]#随机排序
      #同时指定多个字段来进行排序
      ordering=['add_time','-last_login_time']#先按升序,在按降序

       

  • verbose_name_plural: 模型类的复数名,主要用在管理后台的展示上;不设置的话,Django 会使用小写的模型名作为默认值,并且在结尾加上 s。
  • db_table:用于指定数据表的名称
    •   
      #定义该model在数据库中的表名称
        db_table = 'Students'
      #使用自定义的表名,可以通过以下属性
        table_name = 'my_owner_table'
  • app_lable:这个选项只在一种使用情形,就是你的模型不在默认的应用程序包下的 models.py 文件中,这时候需要指定你这个模型是哪个应用程序的 app_label = ‘app_name’。
  • managed:它是一个布尔类型的变量,默认为 Ture,代表 Django 会管理数据的生命周期,即利用 Django 提供的 syncdb 和 reset 命令可以完成创建和删除数据表。如果为 False,则不会对此模型执行数据库表创建或删除操作。
  • indexs:它是一个列表类型的元数据项,用来定义 Model 的索引,列表中的每一个元素都是 Index 类型的实例。
    •     
      Index 引自 django.db.models.indexes.Index
  • default_permissions:Django 默认会给每一个定义的 Model 设置三个权限即添加、更改、删除,它使用格式:default_permissions=('add','change','delete','view')
  • permissions:除了 Django 默认给 Model 添加的三个权限之外,还可以通过 permisssions 给 Model 添加额外的权限。不过 permissions 是一个包含二元组的元组或者列表,所以使用时应该注意格式,即 permissions=[(权限代码,权限名称)],示例如下所示:
    • permissions = [(have_read_permission', '有读的权限')]
  • unique_together:这个选项用于下面情形:当你需要通过两个字段保持唯一性时使用。比如用户的姓名(name)和 身份证号码(ID number)两者的组合必须是唯一的,那么需要这样设置:
    •   
      unique_together = (("first_name", "last_name"),)

      一个 ManyToManyField 不能包含在 unique_together 中。如果你需要验证 ManyToManyField 字段的唯一验证,尝试使用 through 属性进行关联。

  • proxy:默认值为为 False, 如果设置成 Ture,则表示为基类、父类的代理模型。
  • db_tablespace:表空间,用于优化数据库性能,常用于 Oracle、PostgerSQL 数据库。MySQL 数据库不支持表空间,所以当数据存储后端数据库不支持的时候,Django 会在自动忽略这个元数据选项。
  • get_latest_by:指定一个 DateField 或者 DateTimeField 字段的名字,即 model 的属性名字。使用示例如下:
    •   
      get_latest_by = "order_date"

       

  • order_with_respect_to:这个选项一般用于多对多的关系中,它指向一个关联对象并将该对象进行排序,使用元数据项后你会得到一个 get_xxx_order() 和set_xxx_order() 的方法,通过它们你可以设置或者得到排序的对象。

 

posted @ 2023-02-23 18:46  fyyp  阅读(430)  评论(0)    收藏  举报