一周学会Django5 Python Web开发-Django5模型定义

锋哥原创的Python Web开发 Django5视频教程:

2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计41条视频,包括:2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~、第2讲 Django5安装、第3讲 Django5创建项目(用命令方式)等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV14Z421z78C/Django5对各种数据库提供了很好的支持,包括PostgreSQL、MySQL、SQLite和 Oracle,而且为这些数据库提供了统一的API方法,这些API统称为ORM框架。通过使用Django5内置的ORM框架可以实现数据库连接和读写操作。

ORM框架是一种程序技术,用于实现面向对象编程语言中不同类型系统的数据之间的转换。 从效果上说,它创建了一个可在编程语言中使用的“虚拟对象数据库”,通过对虚拟对象数据库的操作从而实现对目标数据库的操作,虚拟对象数据库与目标数据库是相互对应的。在 Django5中,虚拟对象数据库也称为模型,通过模型实现对目标数据库的读写操作,实现方法如下:

  1. 配置目标数据库,在settings.py中设置配置属性

  2. 构建虚拟对象数据库,在App 的models.py文件中以类的形式定义模型。

  3. 通过模型在目标数据库中创建相应的数据表。

  4. 在其他模块(如视图函数)里使用模型来实现目标数据库的读写操作。

settings.py下我们配置mysql数据库:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_python222',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': '3308'
    }
}

然后我们在models.py里新建两个模型类,分别是图书模型BookInfo和图书类别模型BookTypeInfo,他们是多对一的关系;

class BookTypeInfo(models.Model):
    id = models.AutoField(primary_key=True)
    bookTypeName = models.CharField(max_length=20)

    class Meta:
        db_table = "t_bookType"
        verbose_name = "图书类别信息"  # 给模型取个直观的名字


class BookInfo(models.Model):
    id = models.AutoField(primary_key=True)
    bookName = models.CharField(max_length=20)
    price = models.FloatField()
    publishDate = models.DateField()
    bookType = models.ForeignKey(BookTypeInfo, on_delete=models.PROTECT)

    class Meta:
        db_table = "t_book"
        verbose_name = "图书信息"  # 给模型取个直观的名字

模型字段类型如下:

  • AutoField:自增长类型,数据表的字段类型为整数,长度为11位。

  • BigAutoField:自增长类型,数据表的字段类型为bigint,长度为20位。

  • CharField:字符类型。

  • BooleanField:布尔类型。

  • CommaSeparatedIntegerField:用逗号分割的整数类型。DateField:日期( Date)类型。

  • DateTimeField:日期时间( Datetime)类型。Decimal:十进制小数类型。

  • EmailField:字符类型,存储邮箱格式的字符串。

  • FloatField:浮点数类型,数据表的字段类型变成Double类型。IntegerField:整数类型,数据表的字段类型为11位的整数。

  • BigIntegerField:长整数类型。

  • IPAddressField:字符类型,存储Ipv4地址的字符串。

  • GenericIPAddressField:字符类型,存储Ipv4和Ipv6地址的字符串。NullBooleanField:允许为空的布尔类型。

  • PositiveIntegerFiel:正整数的整数类型。

  • PositiveSmallIntegerField:小正整数类型,取值范围为0~32767。SlugField:字符类型,包含字母、数字、下画线和连字符的字符串。

  • SmallIntegerField:小整数类型,取值范围为-32,768~+32,767。

  • TextField:长文本类型。

  • TimeField:时间类型,显示时分秒HH:MM[ :ss[.uuuuuu]]。URLField:字符类型,存储路由格式的字符串。

  • BinaryField:二进制数据类型。

  • FileField:字符类型,存储文件路径的字符串。ImageField:字符类型,存储图片路径的字符串。

  • FilePathField:字符类型,从特定的文件目录选择某个文件。

模型字段参数如下:

  • verbose_name:默认为None,在 Admin站点管理设置字段的显示名称。

  • primary_key:默认为False,若为True,则将字段设置成主键。

  • max_length:默认为None,设置字段的最大长度。

  • unique:默认为False,若为True,则设置字段的唯一属性。

  • blank:默认为False,若为True,则字段允许为空值,数据库将存储空字符串。null:默认为False,若为True,则字段允许为空值,数据库表现为NULL。

  • db_index:默认为False,若为True,则以此字段来创建数据库索引。default:默认为NOT_PROVIDED对象,设置字段的默认值。

  • editable:默认为True,允许字段可编辑,用于设置Admin的新增数据的字段。serialize:默认为True,允许字段序列化,可将数据转化为JSON格式。

  • unique_for_date:默认为None,设置日期字段的唯一性。

  • unique_for_month:默认为None,设置日期字段月份的唯一性。unique_for_year:默认为None,设置日期字段年份的唯一性。choices:默认为空列表,设置字段的可选值。

  • help_text:默认为空字符串,用于设置表单的提示信息。

  • db_column:默认为None,设置数据表的列名称,若不设置,则将字段名作为数据表的列名。

  • db_tablespace:默认为None,如果字段已创建索引,那么数据库的表空间名称将作为该字段的索引名。注意:部分数据库不支持表空间。

  • auto_created:默认为False,若为True,则自动创建字段,用于一对一的关系模型。validators:默认为空列表,设置字段内容的验证函数。

  • error_messages:默认为None,设置错误提示。

ForeignKey方法参数如下:

参数名参数说明
to指定关联的目标模型类。可以使用字符串表示模型类的路径,也可以直接使用模型类的引用。
on_delete指定当关联对象被删除时的行为。CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET0、DO_NOTHING。
related_name指定反向关联的名称,默认为模型类名_set。
to_field指定关联的目标模型类中用于关联的字段名称。默认为主键字段。
db_index如果为True,则在目标模型的关联字段上创建索引。
null指定关联字段是否可以为空。如果 null=True,则数据库中该字段将允许 NULL值。
blank指定关联字段是否可以为空。如果blank=True,则表单中该字段可以为空。
limit_choices_to指定关联对象的过滤条件。可以是一个字典、一个 QuerySet或一个函数。
verbose_name用于在 Django Admin后台中显示字段名称。
help_text用于在 Django Admin后台中显示帮助文本。

on_delete的models属性有下面设置选项;

  • CASCADE:这就是默认的选项,级联删除,你无需显性指定它。

  • PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。

  • SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。

  • SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。

  • SET(): 自定义一个值,该值当然只能是对应的实体了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/498753.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Acwing_795前缀和 【一维前缀和】+【模板】二维前缀和

Acwing_795前缀和 【一维前缀和】 题目&#xff1a; 代码&#xff1a; #include <bits/stdc.h> #define int long long #define INF 0X3f3f3f3f #define endl \n using namespace std; const int N 100010; int arr[N];int n,m; int l,r; signed main(){std::ios::s…

从国内外IT人的差异谈如何破除35岁魔咒

本来想写篇关于DBA如何破除35岁魔咒的文章&#xff0c;但发现整个IT从业人员都面临着35岁魔咒&#xff0c;例如互联网的从业人员的平均年龄只有26岁。但国外同行的职业生命却长得多&#xff0c;这里我们通过分析一下国内外IT人的差异来探讨如何破除35岁魔咒。 我们和丑国的IT…

【数据挖掘】实验5:数据预处理(2)

验5&#xff1a;数据预处理&#xff08;2&#xff09; 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握数据预处理&#xff0c;学习数据清洗、数据集成、数据变换、数据规约、R语言中主要数据预处理函数。 二&#xff1a;实验知识点总结 1&#xff1a;数据集成是将多个…

Ubuntu通过分用户进行多版本jdk配置

前言&#xff1a;本文内容为实操记录&#xff0c;仅供参考&#xff01; linux安装jdk参考&#xff1a;http://t.csdnimg.cn/TeECj 出发点&#xff1a;最新的项目需要用jdk17来编译&#xff0c;就把服务器的jdk版本升级到了17&#xff0c;但是有一些软件例如nexus还需要jdk1.8进…

自动化测试 —— Pytest fixture及conftest详解

前言 fixture是在测试函数运行前后&#xff0c;由pytest执行的外壳函数。fixture中的代码可以定制&#xff0c;满足多变的测试需求&#xff0c;包括定义传入测试中的数据集、配置测试前系统的初始状态、为批量测试提供数据源等等。fixture是pytest的精髓所在&#xff0c;类似u…

Linux系统使用Docker部署MinIO结合内网穿透实现公网访问本地存储服务

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…

pulsar: kafka on pulsar之把pulsar当kafka用

一、下载协议包&#xff08;要和pulsar版本比较一致&#xff09; https://github.com/streamnative/kop/releases?q2.8.0&expandedtrue二、在pulsar的根目录创建一个protocols目录&#xff0c;将上述包放到这个目录里 三、编辑broker.conf(如果是集群)或者standalone.con…

学点儿数据库_Day12_数据库SQL练习题

0 版本与工具 mysql-8.0.31 Navicat Premium 16 每做一题&#xff0c;选中相应代码运行即可&#xff0c;很方便 1 建表 create table goods (goods_id mediumint(8) unsigned primary key auto_increment,goods_name varchar(120) not null default ,cat_id smallint(5) un…

cesium vue 绘制标记实体(撒点),监听鼠标左击事件

添加实体 const viewer new Cesium.Viewer(cesiumContainer, {})viewer.entities.add()查看实体 const viewer new Cesium.Viewer(cesiumContainer, {}) const billboard viewer.entities.add({...})viewer.zoomTo(billboard)删除实体 根据实体删除 if (billboard.value…

C#手术麻醉信息系统全套商业源码,自主版权,支持二次开发 医院手麻系统源码

手术麻醉信息系统是HIS产品的中的一个组成部分&#xff0c;主要应用于医院的麻醉科&#xff0c;属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程&#xff0c;包括手术申请与排班、审批、安排、术前、术中和术后的信息管理提供支持。 手术麻醉信息系统可与EM…

《QT实用小工具·一》电池电量组件

1、概述 项目源码放在文章末尾 本项目实现了一个电池电量控件&#xff0c;包含如下功能&#xff1a; 可设置电池电量&#xff0c;动态切换电池电量变化。可设置电池电量警戒值。可设置电池电量正常颜色和报警颜色。可设置边框渐变颜色。可设置电量变化时每次移动的步长。可设置…

重学SpringBoot3-SpringBoot可执行JAR的原因

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-SpringBoot可执行JAR的原因 Spring Boot可执行JAR的结构打包运行JAR 包内部结构 工作原理优点总结 Spring Boot 的一个核心特性是它的可执行 JAR&#x…

stm32之GPIO寄存器

文章目录 1 背景2 GPIO寄存器的类型2.1 端口配置寄存器2.2 设置/清除寄存器和位清除寄存器 3 总结 1 背景 C51单片机在进行数据的输入输出时&#xff0c;是直接操作与外部引脚关联的内部寄存器&#xff0c;例如&#xff0c;当设置P2_1为0时&#xff0c;就是将外部引脚的P21引脚…

Composer常见错误解决指南 ️

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

基于java疫情防控系统

疫情防控系统 伴随着新年的喜悦&#xff0c;2020年春节之际一场新冠疫情席卷了全球&#xff0c;但是在中国领导人的英明领导之下我国的疫情很快得到了控制&#xff0c;但是因为欧美等国家对疫情的不够重视&#xff0c;仍然有很多的境外疫情携带者会出入我国&#xff0c;为了能…

语句数据库查询有数据,放在帆软预览没数据

问题描述&#xff1a; 要展示的数据&#xff0c;写的sql放在帆软里面预览没数据&#xff0c;然后将语句预览丢在数据库里执行有数据。 问题解决: 1. 首先你要确保两个用的是一个数据库&#xff0c;如果在生产环境中&#xff0c;一般是会有多个数据库&#xff0c;所以你要确保你…

Spring boot 发送文本邮件 和 html模板邮件

Spring boot 发送文本邮件 和 html模板邮件 提示&#xff1a;这里使用 spring-boot-starter-mail 发送文本邮件 和 html模板邮件 文章目录 Spring boot 发送文本邮件 和 html模板邮件一、开启QQ邮箱里的POP3/SMTP服务①&#xff1a;开启步骤 二、简单配置①&#xff1a;引入依赖…

「JavaSE」Lambda表达式

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;快来卷Java啦 &#x1f387;欢迎点赞收藏加关注哦&#xff01; Lambda表达式 &#x1f349;简介&#x1f349;函数式接口&#x1f34c;注解 &#x1f349;语法&#x1f349;Lambda表达式的基本…

如何使用Java语言发票查验接口实现发票真伪查验、票据ocr

随着时代潮流的发展&#xff0c;企业也在寻找更加便捷、高效的办公模式&#xff0c;尤其是针对财务工作人员而言&#xff0c;繁琐的发票录入、查验工作占据了财务人员的大部分时间。对此&#xff0c;翔云提供了发票识别接口、发票查验接口&#xff0c;那么企业应当如何将这些接…

第二证券|沪指震荡涨0.49%,石油、有色等板块拉升

29日早盘&#xff0c;沪指盘中强势上扬&#xff0c;深成指、创业板指小幅走低&#xff0c;科创50指数跌超1%。 到午间收盘&#xff0c;沪指涨0.49%报3025.56点&#xff0c;深成指跌0.22%&#xff0c;创业板指微跌0.07%&#xff0c;科创50指数跌1.34%&#xff1b;两市算计成交5…