用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Django笔记八之model中Meta参数的使用
Django笔记八之model中Meta参数的使用
魏晓东
论坛元老
|
2023-4-4 14:11:23
|
显示全部楼层
|
阅读模式
楼主
主题
1781
|
帖子
1781
|
积分
5343
前面介绍了 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 名称前缀的规定。
以下是使用示例:
class TestModel(models.Model):
pass
class Meta:
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里我们这样指定:
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
class Meta:
get_latest_by = "name"
复制代码
那么当我们使用
Blog.objects.latest()
复制代码
系统就会获取按照 name 字段来排序,取最后一条数据,这个就等价于:
Blog.objects.order_by('name').last()
复制代码
如果在 Meta 中不指定 get_latest_by 参数,那么就会按照 id 返回最后一条数据。
注意:
表里需要有数据,否则会报错。
3、managed
该参数不设置的时候,默认为 True。
如果为 True,那么对这个 model 的每次更改,都会在 makemigrations 的时候被检测到。
这个字段如果为 False,表示 Django 在 makemigrations 的时候会忽略检测这张表,常用在仅用于系统查询的表。
用法如下:
class Blog(models.Model):
pass
class Meta:
managed = True
复制代码
4、ordering
返回数据的默认字段排序。
比如 Blog model,如果我们没有在 Meta 里设置 ordering 的话,当我们使用 Blog 筛选数据的时候,会默认按照 id 正序来返回数据,如果我们在 Meta 里设置了 ordering 这个参数,那么当我们在筛选的时候不使用 order_by() 参数,则会按照我们在 ordering 里设置的字段来排序。
比如,当我们设置:
class Blog(models.Model):
pass
class Meta:
ordering = ["name"]
复制代码
设置ordering 为 ["name"] 之后,Blog.objects.first() 返回的第一条数据,就是按照 name 进行正序排序之后的第一条。
如果想倒序排序,在字段名前加上 '-' 减号即可:ordering = ["-name"]
如果想按照多字段排序:ordering = ["name", "tagline"]
以上就是本篇笔记的全部内容,接下来几篇笔记中将逐步介绍 Django 的 model 在筛选中的一些用法,比如 filter,exclude,alias,values 等。
本文首发于本人微信公众号:Django笔记。
原文链接:
Django笔记八之model中Meta参数的使用
如果想获取更多相关文章,可扫码关注阅读:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
魏晓东
论坛元老
这个人很懒什么都没写!
楼主热帖
基础常用dos命令
Vulnhub靶机-Al-Web-1
Unity技术手册 - Shader实现灵魂状态 ...
.NET主流的几款重量级 ORM框架 ...
云原生之旅 - 14)遵循 GitOps 实践的 ...
Java集合框架(三)-HashSet
vuluhub_jangow-01-1.0.1
Android studio连接MySQL并完成简单的 ...
2022年总结-博客篇
gis pro中将shp文件转为/导入地理数据 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
开源技术
快速回复
返回顶部
返回列表