Django中的模型层
模型层的了解
大家都知道Django遵循的是MTV模式,其中M指的就是Model,就是今天要学习的模型层。
模型(Model)负责业务 对象和 数据库的 关系映射(ORM)
ORM是“对象-关系-映射”的简称,主要任务是:
- 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。
- 将对象、列表的操作,转换为sql语句。
- 根据设计的模型类生成数据库中的表格。
- 将sql查询到的结果转换为对象、列表
Model是MVC框架中重要的一部分,主要负责程序中用于处理数据逻辑的部分(如数据的存取)。它包含你所储存数据的必要字段和行为。通常,每个模型对应数据库中唯一的一张表。
模型
我们知道了模型层的作用,你有没有想过模型是一个什么东西呢?下面带领大家一起来学习。
什么是模型?
- 模型是一个Python类,它是由django.db.models.Model派生出的子类。
- 一个模型类代表数据库的一张数据表。
- 模型类中的每一个属性都代表数据库中的一个字段。
- 模型是数据交互的接口,是表示和操作数据库的方法和方式。
创建模型类
在应用下的models.py中编写模型类模板(下面我会讲到字段名相关知识):
from django.db import models
class 模型类名(models.Model):字段名 = models.字段类型(字段选项)
举个栗子:
class Book(models.Model):title = models.CharField('书名', max_length=50, default='',unique=True)public = models.CharField('出版社',max_length=100,default='')price = models.DecimalField('价格',max_digits=7, decimal_places=2)info = models.CharField('描述',max_length=100, default='')market_price = models.DecimalField('零售价',max_digits=7,decimal_places=2,default=0.0)
重点是编写完成后一定要在终端进行迁移同步,执行以下命令:
python3 manage.py makemigrations
python3 manage.py migrate
字段类型
字段是模型中最重要的内容之一,也是唯一必须的部分。字段在Python中表现为一个类属性,体现了数据表中的一个列。请不要使用clean
、save
、delete
等Django内置的模型API名字,防止命名冲突。下面我会列举出一些常见的字段类型:
BooleanField():数据库类型是tinyint(1),使用Ture或False来表示值。
CharField():数据库类型是varchar,必须要指定max_length参数值,这个是指字符的长度。
DateField():对应的数据库类型是date,用来表示日期,以下三个参数只能多选一,auto_now:每次保存对象时,自动设置该字段为当前时间(取值:Ture/False);auto_now_add:当对象第一次被创建时自动设置当前时间(取值:Ture/False);default:设置当前时间(取值:字符串格式时间如:'2022-11-7')。
DateTimeField(): 和上面DateField()参数一致,不过是这个精确到小时分钟秒。
FloatField():数据库类型是double,表示小数。
DecimalField():对应数据库中的decimal(x,y),使用小数表示该列的值,参数max_digits:表示位数总数,包括小数点后面的位数;decimal_places:表示小数点后的数字数量。
EmailField():字符串,用来存邮箱。
IntegerField():数据库类型中的int,使用整数。
ImageField():数据库类型是varchar(100),字段的值保存的是该图片的路径。
更多精彩请阅读官方文档:http://docs.djangoproject.com/en/2.2/ref/models/fields/#field-types
字段选项
通过字段选项,可以实现对字段的约束
允许出现多个字段选项,多个选项之间使用,隔开
primary_key:如果设置为Ture,表示该例为主键,如果指定一个字段为主键,则此数据库表不会创建id字段。
blank:设置为Ture时,字段可以为空;设置为False时,字段是必须填写的。
null:如果设置为True,表示该列值允许为空;默认为False。
default:设置所在列的默认值,如果字段选项null=False建议添加此项。
db_index:如果设置为Ture,表示为该列增加索引。
unique:如果设置为Ture,表示该字段在数据库中的值必须是唯一(不能重复出现)。
db_column:指定列的名称,如果不指定的话则采用属性名作为列名。
verbose_name:设置此字段在admin界面上的显示名称。
希望本篇文章对你有所帮助
Django中的模型层相关推荐
- Django框架(10.Django中的模型类的定义以及模型类字段属性和选项)
Django中的模型类的定义以及模型类字段属性和选项 1.模型类的定义 2.模型类属性命名限制 2.1字段类型和属性 2.2选项 1.模型类的定义 ORM:表就代表类,字段代表属性 模型类需要继承自m ...
- Django框架的模型层之多表操作
目录 一 创建模型 二 表记录的增删改 一对多 多对多 三.基于对象的跨表查询 一对一查询(Author 与 AuthorDetail) 一对多查询(publish与book) 多对多查询 (Auth ...
- Django框架(16.Django中的模型类管理器以及自定义管理器)
模型类.objects.all()->objects是一个什么东西呢? 答:objects是Django帮我自动生成的管理器对象,通过这个管理器可以实现对数据的查询. objects是model ...
- Django中的模型继承
1.使用最原始的方式继承 class Animal(models.Model):name = models.CharField(max_length=20)age = models.IntegerFi ...
- django中model模型
python manage.py dumpdata blog # 导出blog数据 python manage.py loaddata blog_dump.json # 导入数据 m ...
- Django中--自定义模型管理器类
BookInfo.objects.all()->objects是一个什么东西呢? 答:objects是models.Manger类的一个对象,是Django帮我自动生成的管理器对象,通过这个管理 ...
- Django中models模型(操作数据库)
ORM 自己创建数据库 连接数据库 Django操作表 数据库操作 新建 删除 获取数据 实例:用户管理 Django开发操作数据库更简单,内部提供了ORM框架 ORM的流程 ORM ORM,全称 O ...
- Django学习之模型层---多表操作之查(一)
1>基于对象的跨表查询 基于对象的跨表查询,转换成sql语句就相当sql的子查询,以一条sql的输出作为另一条sql的筛选条件 目前的表结构及数据如下(数据随意插入,小说迷请无视): 以几个例子 ...
- 【小白学习keras教程】三、Kears中常见模型层Padding、Conv2D、MaxPooling2D、Flatten和Dense
@Author:Runsen 文章目录 基础知识 1.Padding 2. FIlter/kernels 3.Pooling 4.Flattening 5.Fully Connected (Dense ...
最新文章
- DecimalFormat 的使用
- 财务学习mysql_从零开始学 MySQL - 前言
- MySQL完整备份,还原
- H5js的一些好玩的东西
- JAVA——基于HttpClient的正方教务系统[1999-2020]模拟登录基本解决方案
- osm2mysql_安装部署MySQL主从复制
- 洛谷P4742(tarjan缩点+拓扑DP)
- html2canvas改成同步,html2canvas转为图片异步转同步问题(记录)
- STM32f4 ARM Bootloader
- HTML5 布局元素
- 玛丽卡(codevs 1021)
- 这家共享单车确认已坑12.5万用户 总金额超2512万元
- Visual Studio Code 1.41 发布
- ubuntu18安装微信
- delphi 停电文本数据丢失_河南照片数据恢复怎么联系
- html如何让图片背景透明,html – 如何让我的网站的背景透明,而不使内容(图像和文字)也是透明的?...
- 对Tabular方法的总结
- x射线微型计算机断层扫描技术,X射线断层扫描技术,分析缺陷对性能影响的利器...
- uniapp跳转指定小程序
- Java Apache POI 小记(读取Word通过模板创建PPT)