排序字段设计_「原创」第四章、模型设计
java进阶架构师”,选择右上角“置顶公众号”
20大进阶架构专题每日送达
模型设计
回顾
前三章我们可以算是一脚迈进了Django的大门(也称入坑),因为程序员入坑第一步就是学会Hello World。希望你别骄傲,我们接下来才是真正的旅途——一起领略Django真正的迷人之处。
模型本质
现在,我们来学习模型,Django模型层是Django框架自定义的一套独特的ORM(Object Relational Mapping,关系映射模型)技术。
模型本质上就是数据库表的布局,再附加一些元数据。模型包含了你要在数据库中创建的字段信息及对数据表的一些操作。
基本操作
想要操作模型,我们先来了解Django模型层的大概。使用Django模型开发的首要任务就是定义模型类及其属性,每个模型的物理存在方式就是一个Python的类Class,每个模型代表数据库中的一张表,每个类的实例代表数据表中的一行数据,而类中的每个属性被映射为数据表中的一列字段。
可能你还是很懵逼,没关系,我们从伪代码中再来看看这些概念。
模型类定义
模型定义的基本结构如下:
from django.db import models
class ModelName(models.Model):
field1 = models.XXField(...)
fiels2 = models.XXField(...)
...
class Meta:
db_table = ...
other metas = ...
解析如下:
所有Django模型都是django.db.models.Model类的子类。每个类都会被转换为数据库表
通过其中的类属性定义模型字段,模型字段必须是某种models.XXField类型,比如CharField,DateTimeField等等,而这些就会被转换为对应数据库表中的列
通过模型类中的Meta子类定义模型元数据,比如数据库表名、数据默认排序方式等。
我们来详细看一个样例:定义了一个 Person, 其拥有 first_name 和 last_name:
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
first_name 和 last_name 是模型的字段。每个字段都被指定为一个类属性,并且每个属性映射为一个数据库列。
上面的 Person 模型会创建一个如下的数据库表:
CREATE TABLE myapp_person (
"id" serial NOT PRIMARY KEY,
"first_name" varchar(30) NOT ,
"last_name" varchar(30) NOT
);
我们介绍一下class Meta中的那些属性,Meta类的属性名由Django预定义,我们无需自己创建,Model 元数据就是 "不是一个字段的任何数据" -- 比如排序选项,常见的Meta类属性汇总如下:
abstract: True or False,标识本类是否为抽象基类
app_label:定义本类所属的应用,比如app_labels = 'myapp'
db_table:映射的数据表名,比如db_table='db_blogs'
default_related_name:定义本模型的反向关系引用名称,默认与模型名一致。
ordering:本模型记录的默认排序字段,可以设置多个字段,默认以升序排列,如果降序需要在字段前加“负号”。比如,按文章发布时间降序显示:
class Meta:
ordering = ("-publish_date
排序字段设计_「原创」第四章、模型设计相关推荐
- 排序字段设计_内容搜索排序表达式的最佳实践
简介:本文重点介绍"开放搜索"中的排序表达式的配置及特征性函数的应用 某新闻资讯平台,在内容搜索场景中需要满足业务多样化,个性化的需求,在query改写配置好后,希望在排序阶段进行 ...
- pep8 python 编码规范_「原创」「python自学笔记」python编码规范
编码规范是学习一个语言前必须要了解的. Python采用PEP8作为编码规范,PEP是Python Enhancement Proposal(Python 增强建议书)的缩写,8代表的是Python代 ...
- 先进制造技术论文_「原创」轴承先进锻造工艺及制造技术
我国中小型轴承锻造成形工艺经历了从1980年以前的棒料打孔.单挤.辗扩,发展到现在的自动化.近净成形.高速锻等技术,不断推陈出新,表1为由1980年以前到现今的轴承锻造成形工艺的发展历程. 国内轴承质 ...
- 千图成像_「原创」千图成像,用PS给人物制作全图的拼人像
本篇教程要制作一种马赛克效果的拼图,但又不是单纯的马赛克,中间还会有若隐若现的人像,整体看上去很高级,发朋友圈引来很多赞的那种,制作起来也是很简单,是那种只要你动手,就可以学会的那种,很有效果,很好学 ...
- filco蓝牙不好用_「原创」开箱 FILCO 斐尔可 蓝牙双模键盘+更换键帽
朋友之前定了Leopold 750,于是,我就屁颠屁颠的过去要求开箱了,话不多说接下来就是喜闻乐见的开箱了. FILCO 斐尔可 蓝牙双模键盘 键盘防城罩很棒,所有键位都覆盖了,拔键器也很棒,感觉做工 ...
- wsl2启动桌面_「原创」windows10下自定义WSL安装路径及启动WSL2
win10是目前在win系列的个人操作系统中,个人觉得是最好用的,没有之一.现在又能拥有WSL2的功能,让ubuntu与win10无缝的结合.简直就是完美的不能再完美了.享受着win10的强大桌面系统 ...
- 你的设计应该「所见即所得」
本文讲的是你的设计应该「所见即所得」, 几年前的一个夏天,我有机会住在旧金山里同一栋楼不同单元的两个 Loft 公寓中. 由于这是同一栋楼,所以你可能会想这两个单元应该是相似的.的确,它们都有1000 ...
- 「图论」第1章 并查集课堂过关
文章目录 A. [例题1][模板]并查集 题目 代码 B. [例题2]程序自动分析 题目 代码 C. [例题3]银河英雄传说 题目 题目背景 题目描述 输入格式 输出格式 输入输出样例 说明/提示 思 ...
- 《Reids 设计与实现》第十四章 集群(上)
<Reids 设计与实现>第十四章 集群(上) 文章目录 <Reids 设计与实现>第十四章 集群(上) 一.简介 二.节点 1.启动节点 2.集群数据结构 3.CLUSTER ...
最新文章
- MongoDB 删除数据库
- linux系统启动流程详解
- 分布式事物解决方案-TCC
- redis(一)--简介
- 【译】CodeIgniter HMVC模块扩展使用文档
- 870C. Maximum splitting
- 怎么利用ffmpeg和AviSynth给在windows下面为flv文件加水印
- 华为鸿蒙联合品牌,魅族官宣:接入华为鸿蒙!这是国产智能手机品牌的首个公开表态!...
- 60多年来计算机是根据什么的发展,计算机复习题98197.doc
- 54. mysqli 扩展库
- java小程序(万年历)
- HDU - 6070 线段树 + 分数规划
- 客户要管理,就靠crm吗?
- 数字化改造大宗商品供应链 ,为大宗商品贸易增添活力
- python dataframe 列筛选_pandas系列之DataFrame 行列数据筛选实例
- 推荐使用Windows10企业版LTSC的理由
- Oracle中的sql语句
- os系统解决seaborn中文乱码问题 Font family [‘SiHei‘] not found
- eleUi解决表单中el-select选择器比el-input输入框小的问题
- java编程实现删除一个文件夹_Java实现文件夹删除方式总结详解