【Python】【进阶篇】34、Django Meta元数据类属性解析

这篇具有很好参考价值的文章主要介绍了【Python】【进阶篇】34、Django Meta元数据类属性解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

34、Django Meta元数据类属性解析

Model 是 Django ORM 的核心,它有许多特性,比如我们提到过的模型类继承,还有未讲到过的的元数据。每个 Model 都是一个 Python 类,且通常会包含四个部分,它们分别如下:

  • 继承自 django.db.model.Model;
  • Model 元数据声明;
  • Filed类型字段;
  • 魔术方法__str__

除了元数据以外,其他三个部分我们在前面的章节都做了相应的介绍,在本节将详细讲解元数据 Meta 类属性。

1. 初识Meta内部类

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

Meta 定义的元数据相当于 Model 的配置信息,所以我们可以根据自己的需求进行选择性的添加。当没有需要的时候也可以不定义 Meta,这个时候 Django 会应用默认的 Meta 元数据。

2. Meta类元数据

通过上面的介绍我们知道 Meta 类的作用就是用于定义 Model 的元数据,即不属于 Model 的字段,但是可以用来标识字段一些属性,下面我们介绍 Meta 定义的常见元数据以及如何在 Model 中使用它们。

1) abstract

一个布尔类型的变量。这个属性是定义当前的模型是不是一个抽象类。所谓抽象类是不会对应数据库表的。一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段。如果 abstract = True 这个 model 就是一个抽象类。

2) ordering

用于执行获取对象列表时的排序规则。它是一个字符串的列表或元组对象,它的使用格式是由代表字段的字符串和一个表明降序的'-'构成。当字段名前面没有'-'时,将默认使用升序排列。使用'?'将会随机排列。示例如下所示:

    ordering=["add_time"] #按照升序排序
    ordering=["-add_time"]#按照降序
    ordering=["?add_time"]#随机排序
    #同时指定多个字段来进行排序
    ordering=['add_time','-last_login_time']#先按升序,在按降序
3) verbose_name_plural

这个元数据主要用在管理后台的展示上,verbose_name_plural 是模型类的复数名 。如果不设置的话,Django 会使用小写的模型名作为默认值,并且在结尾加上 s。通过此项元数据设置名字可以去掉 s。 可参见《Django Admin数据表可视化》一节。

4) db_table

这个字段用于指定数据表的名称,通常没有特别需求,将按照 Django 默认的规则生成 Model 对应的数据库表名。

    #定义该model在数据库中的表名称
      db_table = 'Students'
    #使用自定义的表名,可以通过以下属性
      table_name = 'my_owner_table'
5) app_lable

这个选项只在一种使用情形,就是你的模型不在默认的应用程序包下的 models.py 文件中,这时候需要指定你这个模型是哪个应用程序的 app_label = ‘app_name’。

6) managed

它是一个布尔类型的变量,默认为 Ture,代表 Django 会管理数据的生命周期,即利用 Django 提供的 syncdb 和 reset 命令可以完成创建和删除数据表。如果为 False,则不会对此模型执行数据库表创建或删除操作。比如数据表之间存在 ManyToMany 的关系,在指定为 managed=False 的情况下,Django 不会自动创建中间表,需要我们自己手动创建。

7) indexs

它是一个列表类型的元数据项,用来定义 Model 的索引,列表中的每一个元素都是 Index 类型的实例。

Index 引自 django.db.models.indexes.Index

8) default_permissions

Django 默认会给每一个定义的 Model 设置三个权限即添加、更改、删除,它使用格式:default_permissions=(‘add’,‘change’,‘delete’,‘view’)

9) permissions

除了 Django 默认给 Model 添加的三个权限之外,还可以通过 permisssions 给 Model 添加额外的权限。不过 permissions 是一个包含二元组的元组或者列表,所以使用时应该注意格式,即 permissions=[(权限代码,权限名称)],示例如下所示:

permissions = [(have_read_permission', '有读的权限')]
10) unique_together

这个选项用于下面情形:当你需要通过两个字段保持唯一性时使用。比如用户的姓名(name)和 身份证号码(ID number)两者的组合必须是唯一的,那么需要这样设置:

unique_together = (("first_name", "last_name"),)

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

11) proxy

默认值为为 False, 如果设置成 Ture,则表示为基类、父类的代理模型。这个选项在后续章节还会进行相关介绍,它的主要作用就是创建父模型的代理模型。

12) db_tablespace

表空间,用于优化数据库性能,常用于 Oracle、PostgerSQL 数据库。MySQL 数据库不支持表空间,所以当数据存储后端数据库不支持的时候,Django 会在自动忽略这个元数据选项。

13) get_latest_by

指定一个 DateField 或者 DateTimeField 字段的名字,即 model 的属性名字。使用示例如下:

get_latest_by = "order_date"

这个设置让你在使用模型管理器的 lastest() 方法时,默认使用order_date 指定字段来排序。

14) order_with_respect_to

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

本节给大家介绍了 Meta 类以及类中定义的各项元数据。Meta 类是对 model 模型类的进一步完善以及扩展,所以对于重点的元数据项要学会使用。大家也可以参照官方文档《Model Meta options》进一步学习它,文档中提供了所有的 Meta 类元数据选项。文章来源地址https://www.toymoban.com/news/detail-443582.html

到了这里,关于【Python】【进阶篇】34、Django Meta元数据类属性解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】【进阶篇】30、Django模板继承精讲

    在本节我们讲述模板语言中最后一个知识点,也是最重要的,那就是模板继承。模板继承和 Python 语言中类的继承含义是一样的,在 Django 中模板只是一个文本文件,如 HTML,XML,CSV等文件格式。那模板继承到底是是什么呢?如何在 Django 中使用它呢?让我们一起一探究竟。 模

    2024年02月04日
    浏览(45)
  • 【Python】【进阶篇】24、Django if标签详解

    本节继续讲解 Django 的模板语言,Django 内置了许多标签用于简化模板的开发过程,同时 Django 也支持自定义标签,这极大的方便了 Web开发者,下面我们依次进行介绍。 Django 的模板系统对标签的解释是在渲染的过程中提供相应的逻辑,比如Python 语言中 if…else 语句、with 语句、

    2024年02月03日
    浏览(39)
  • 【Python】【进阶篇】14、Django创建第一个项目

    在上一章中,我们完成了开发环境的搭建工作。 本章我们将学习如何创建 Django 项目以及 Django 项目的初始化,我们将创建一个名为 BookStore 的 Django 项目,用此项目来讲解 Django 框架的部分知识,通过这个项目我们将一起打开 Django 世界的大门。 1) BookStore项目创建 我们创建一

    2024年02月02日
    浏览(52)
  • Python学习笔记_进阶篇(四)_django知识(三)

    本章内容: Django 发送邮件 Django cookie Django session Django CSRF 我们常常会用到一些发送邮件的功能,比如有人提交了应聘的表单,可以向HR的邮箱发邮件,这样,HR不看网站就可以知道有人在网站上提交了应聘信息。今天我们尝试用django发送邮件做尝试 1、配置相关参数settings 往

    2024年02月11日
    浏览(47)
  • Python学习笔记_进阶篇(三)_django知识(二)

    本章内容 Django model django默认支持sqlite,mysql, oracle,postgresql数据库。 1 sqlite django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 引擎名称:django.db.backends.sqlite3 2mysql 引擎名称:django.db.backends.mysql 1、配置文件中sqlite 2、配置文件中mysql 注:由于Django内部连接MySQL时使用的

    2024年02月12日
    浏览(41)
  • Python学习笔记_进阶篇(二)_django知识(一)

    本章简介: Django 简介 Django 基本配置 Django url Django view Django 模板语言 Django Form Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于

    2024年02月12日
    浏览(46)
  • meta 标签中的 viewport 相关属性

    meta 标签中的 viewport 相关属性: initial-scale 属性用于设置页面初始的缩放比例,缩放比例为理想视口与视觉视口的比值。 -------------------- width:    页面宽度,正整数或 device-width(设备宽度),定义视口的宽度,单位为像素。 height:    页面高度,正整数或 device-height(设备高度

    2024年02月07日
    浏览(57)
  • HTML中meta标签的那些属性

    meta 标签是 HTML 中用于描述网页元信息的元素。它位于 head 部分,不会显示在页面内容中,但对于浏览器、搜索引擎等具有重要作用。主要作用有:定义文档的字符编码、提供网页的描述信息、、作者、视口设置等,这些信息有助于搜索引擎理解和索引网页内容。  

    2024年02月03日
    浏览(42)
  • 【Python】【进阶篇】39、Django F对象和Q对象查询详解

    F对象查询与Q对象查询,刚看到大家一定会感到很陌生,其实它们也是 Django 提供的查询方法,而且非常的简单的高效,对于一些特殊的场景需求应用起来非常的合适,在本节我们将对这两种查询方法进行讲解,帮助大家掌握它们的使用方法以及适合应用的场景。 F对象主要用

    2024年02月05日
    浏览(39)
  • meta标签name=“referrer“属性的写法和用法

    HTMLmeta标签name=\\\"referrer\\\"属性主要用于控制网页发送给服务器的referrer信息,可以告诉服务器端用户是从哪个页面来到当前网页的。 什么是referrer? referrer有“引用页面”或“来源页面”的意思,用来指定当前页面是从哪个页面跳转过来的,也就是说HTTP请求报头中的referrer包含了

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包