翼度科技»论坛 编程开发 python 查看内容

Django笔记八之model中Meta参数的使用

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
前面介绍了 model 的字段属性,字段类型,这篇笔记介绍一下 model 的 Meta 选项。
这个选项提供了一些参数,比如排序(ordering),表名(db_table)等。
但这都不是必需的,都是作为可选项,主要是为使用者提供方便的、自定义的一些用法。
以下是本次笔记的目录列表:

  • db_table
  • get_latest_by
  • managed
  • ordering
1、db_table

一般如果我们创建 model 的时候不指定表名,系统在 makemigration 和 migrate 的时候会默认给我们添加表名。
规则是:app_name + "_" + model_name 的小写。
比如一个 model 为 TestTableName,放在 blog 这个 application 下,那么在迁移的时候,数据库表名则是:blog_testtablename。
注意: 上述情况使用的数据库是 oracle,且表名过长,则会因为 oracle 有一个表名长度的限制,会截取表名的长度。
而如果我们在 Meta 里使用 db_table 参数,则可以直接指定表名,且无视 application 名称前缀的规定。
以下是使用示例:
  1. class TestModel(models.Model):
  2.         pass
  3.         class Meta:
  4.                 db_table = 'test_table'
复制代码
那么在执行 migration 的时候,系统会为这个 model 创建表名为 test_table 的表。
以上也是 Meta 使用的方式。
2、get_latest_by

指定 latest() 函数默认使用的字段。
先来介绍一下 latest() 函数,这个函数的使用方法后面会介绍,有一种用法:TestModel.objects.latest('field_name'),这样通过指定字段名称,系统会返回 TestModel 按照字段名为 field_name 排序的最新的一条数据。
而如果我们在 Meta 里指定了这个参数,那么我们就就可以在使用上述方法的时候不用指定字段名,按照我们在 Meta 里指定的字段名来排序返回最新的一条,比如在 Blog model里我们这样指定:
  1. class Blog(models.Model):
  2.     name = models.CharField(max_length=100)
  3.     tagline = models.TextField()
  4.     class Meta:
  5.         get_latest_by = "name"
复制代码
那么当我们使用
  1. Blog.objects.latest()
复制代码
系统就会获取按照 name 字段来排序,取最后一条数据,这个就等价于:
  1. Blog.objects.order_by('name').last()
复制代码
如果在 Meta 中不指定 get_latest_by 参数,那么就会按照 id 返回最后一条数据。
注意: 表里需要有数据,否则会报错。
3、managed

该参数不设置的时候,默认为 True。
如果为 True,那么对这个 model 的每次更改,都会在 makemigrations 的时候被检测到。
这个字段如果为 False,表示 Django 在 makemigrations 的时候会忽略检测这张表,常用在仅用于系统查询的表。
用法如下:
  1. class Blog(models.Model):
  2.         pass
  3.         class Meta:
  4.                 managed = True
复制代码
4、ordering

返回数据的默认字段排序。
比如 Blog model,如果我们没有在 Meta 里设置 ordering 的话,当我们使用 Blog 筛选数据的时候,会默认按照 id 正序来返回数据,如果我们在 Meta 里设置了 ordering 这个参数,那么当我们在筛选的时候不使用 order_by() 参数,则会按照我们在 ordering 里设置的字段来排序。
比如,当我们设置:
  1. class Blog(models.Model):
  2.         pass
  3.        
  4.         class Meta:
  5.                 ordering = ["name"]
复制代码
设置ordering 为 ["name"] 之后,Blog.objects.first() 返回的第一条数据,就是按照 name 进行正序排序之后的第一条。
如果想倒序排序,在字段名前加上 '-' 减号即可:ordering = ["-name"]
如果想按照多字段排序:ordering = ["name", "tagline"]
以上就是本篇笔记的全部内容,接下来几篇笔记中将逐步介绍 Django 的 model 在筛选中的一些用法,比如 filter,exclude,alias,values 等。
本文首发于本人微信公众号:Django笔记。
原文链接:Django笔记八之model中Meta参数的使用
如果想获取更多相关文章,可扫码关注阅读:


来源:https://www.cnblogs.com/hunterxiong/p/17255793.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具