Django4全栈进阶之路5 Model模型
在 Django 中,模型(Model)是用于定义数据结构的组件,其作用如下:
定义数据结构:模型用于定义数据库中的表格和表格中的字段(列),其中每个模型类对应一个表格,模型中的每个字段对应表格中的一列。模型的定义可以在
models.py
文件中完成。数据库操作:模型提供了简单易用的 API 用于操作数据库,包括创建、读取、更新和删除数据等。通过模型可以直接在数据库中执行 CRUD 操作,无需手动编写 SQL 语句。
数据验证:Django 中的模型还提供了强大的数据验证功能,可以在保存数据之前验证数据的完整性和有效性,确保数据的正确性。
ORM 框架:Django 的模型是基于 ORM(对象关系映射)框架实现的,可以轻松地在不同的数据库之间切换,同时也提供了方便的数据访问和查询功能,避免了直接编写 SQL 语句带来的繁琐和错误。
总的来说,模型是 Django 应用程序中最重要的组件之一,它负责定义数据结构、操作数据库、数据验证和 ORM 框架等方面的功能。通过模型的定义和使用,可以更加方便地管理应用程序中的数据,并且可以保证数据的正确性和安全性。
实例:
from django.db import models
from django.utils import timezone class Repair(models.Model):
# 报修单号,使用自增长的主键作为唯一标识
id = models.AutoField(primary_key=True,verbose_name="报修编号")
# 报修时间,使用默认值为当前时间
date = models.DateTimeField(default=timezone.now,verbose_name="报修时间")
# 报修人姓名,最大长度为50个字符
name = models.CharField(max_length=50)
# 报修人电话,最大长度为20个字符
phone = models.CharField(max_length=20)
# 报修内容,最大长度为200个字符
content = models.CharField(max_length=200)
# 报修状态,使用choices定义状态的可选值
STATUS_CHOICES = [
('pending', '待处理'),
('processing', '处理中'),
('completed', '已完成'),
('canceled', '已取消')
]
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending')
created_at = models.DateTimeField(auto_now_add=True,verbose_name="创建时间")
updated_at = models.DateTimeField(auto_now=True,verbose_name="更新时间") class Meta:
verbose_name = "报修单"
verbose_name_plural = "报修单"
# 按照报修时间倒序排列
ordering = ['-date'] def __str__(self):
# 返回报修单号和报修人姓名
return f"{self.id} ({self.name})" def cancel(self):
# 取消报修单
self.status = 'canceled'
self.save()
上述代码定义了一个名为 Repair
的模型,其中包含了报修单号、报修时间、报修人姓名、报修人电话、报修内容和报修状态等字段。该模型的属性和方法说明如下:
id
:使用AutoField
定义主键字段,作为唯一标识符。Django 4 中的模型(Model)类默认会自动为每个模型添加一个自增的整数类型主键字段,不需要显式地在模型中定义id
字段。date
:使用DateTimeField
定义报修时间字段,使用timezone.now
设置默认值为当前时间。name
:使用CharField
定义报修人姓名字段,设置最大长度为 50 个字符。phone
:使用CharField
定义报修人电话字段,设置最大长度为 20 个字符。content
:使用CharField
定义报修内容字段,设置最大长度为 200 个字符。status
:使用CharField
定义报修状态字段,使用choices
定义状态的可选值,设置默认值为pending
。Meta
:使用Meta
类设置模型的元数据,包括排序方式等。在这里,我们将报修单按照报修时间的倒序排列。__str__
方法:使用__str__
方法返回报修单的字符串表示,方便在 Django 后台管理界面中查看。cancel
方法:定义一个cancel
方法,用于取消报修单,将状态设置为canceled
并保存到数据库中。- 使用了
verbose_name
和verbose_name_plural
选项来分别设置模型的名称和复数形式。同时,我们也将所有字段的verbose_name
设置为相应的汉字名称,以便在 Django 后台管理界面中更清晰地展示信息。 - 同时,我们增加了创建时间和更新时间字段,用于记录每条记录的创建时间和最后更新时间。
created_at
字段使用了auto_now_add=True
参数,表示在创建记录时自动设置为当前时间。updated_at
字段使用了auto_now=True
参数,表示每次保存记录时都会自动更新为当前时间。
以上是一个简单的报修表的模型定义,可以作为 Django 模型的一个示例来参考。需要注意的是,这只是一个示例,实际项目中
Django4全栈进阶之路5 Model模型的更多相关文章
- web前端全栈学习之路
web前端全栈学习之路 --- 陆续更新中 一.HTML相关 1.HTML常用标签:http://www.cnblogs.com/wyb666/p/8733699.html 2.HTML5基础: 3. ...
- python 全栈开发之路 day1
python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
- 你的Node应用,对接分布式链路跟踪系统了吗?(一) 原创: 金炳 Node全栈进阶 4天前 戳蓝字「Node全栈进阶」关注我们哦
你的Node应用,对接分布式链路跟踪系统了吗?(一) 原创: 金炳 Node全栈进阶 4天前 戳蓝字「Node全栈进阶」关注我们哦
- C#.Net全栈工程师之路-学习路径
C#.Net全栈工程师之路-学习路径 按架构分: C/S架构: B/S架构: Mobile移动开发: 按技术点分: C#编程基础以及OOP面向对象编程: 数据库基础以及高级应用(MYSQL+MSSQL ...
- Scala进阶之路-并发编程模型Akka入门篇
Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...
- 战争热诚的python全栈开发之路
从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...
- Python全栈开发之路 【第四篇】:Python基础之函数
本节内容 函数def: 1.位置参数,默认参数 2.位置参数,关键参数 3.如果参数中出现 *users,传递的参数就可以不再是固定的个数, 传过来的所有元素进行打包成元组 *args,**kwarg ...
- python 全栈开发,Day117(popup,Model类的继承,crm业务开发)
昨日内容回顾 第一部分:权限相关 1. 权限基本流程 用户登录成功后获取权限信息,将[权限和菜单]信息写入到session. 以后用户在来访问,在中间件中进行权限校验. 为了提升用户体验友好度,在后台 ...
- Python全栈开发之路 【第七篇】:面向对象编程设计与开发(1)
本节内容 一.编程范式 编程指的是写程序.敲代码,就是指程序员用特定的语法.数据结构和算法编写的代码,目的是来告诉计算机如何执行任务的. 在编程的世界里最常见的两大流派是:面向过程与面向对象.“功夫的 ...
- Python全栈开发之路 【第一篇】:Python 介绍
本节内容 一.Python介绍 python的创始人为荷兰人——吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本 ...
随机推荐
- leetcode-1072 Flip Columns For Maximum Number of Equal Rows
Given a matrix consisting of 0s and 1s, we may choose any number of columns in the matrix and flip e ...
- 每次新建项目都要重新配置Maven项目很麻烦,这里出一个小技巧,配置一次就直接搞定所有的
Maven一次配置永久使用教程 首先,打开IDEA,将你目前放出来的项目关掉:(File->Close Project) 其次,在左侧栏里面选择这个: 然后,选择中间的这里: 接着,在弹出的页面 ...
- 马志强:语音识别技术研究进展和应用落地分享丨RTC Dev Meetup
本文内容源自「RTC Dev Meetup 丨语音处理在实时互动领域的技术实践和应用]的演讲分享,分享讲师为寰语科技语音识别研究主管马志强. 01 语音识别技术现状 1.语音成为万物互联时代人机交互关 ...
- FutureTask 类
更多内容,前往IT-BLOG 一.什么是 Future和 FutureTask FutureTask 的 Future就源自于它的异步工作机制,如果我们在主线程中直接写一个函数来执行任务,这是同步的任 ...
- Windows和Linux时间相差8个小时
安装linux系统比如deepin.ubuntu之后和Windows两个系统时间相差八个小时的解决方案: 在linux系统下依次输入下方命令: sudo apt install ntpdate sud ...
- 【Visual Leak Detector】QT 中 VLD 输出解析(一)
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记. 目录 说明 1. 使用方式 2. 无内存泄漏时的输出报告 1. 使用方式 在 QT 中使用 VLD 的方法可以查看另外几篇博客: [Vi ...
- c++与linux详细计划,精确到每一天(仅80天)
好的,以下是三个月中每一天的学习计划: 第一个月: 第1天:阅读C++教程,熟悉环境,了解基本语法和数据类型 第2天:编写Hello World程序,加深对C++环境的了解 第3天:学习函数的定义和调 ...
- 计网学习笔记五 wireless && mobile networks
老师把无线网络用一节课一遍过了-感觉没能学透,便课后自己总结,看书,找资料补充,把无线网络大概摸了个七七八八.虽然不算精细,但还能看!内容包括WLAN总概,WiFi-WLAN的实现,802.11规定的 ...
- 【CTF】系统调用号查询表
32位 #ifndef _ASM_X86_UNISTD_32_H #define _ASM_X86_UNISTD_32_H 1 #define __NR_restart_syscall 0 #defi ...
- sqlite4操作
目录 SQLite数据库(一):基本操作... 1 目录... 1 一.SQLite介绍... 2 1. 什么是SQLite. 2 2. 什么是数据库... 2 3. 数据库是如何存 ...