Django之models模块
一、字段
1、 AutoField(Field) int自增列,必须填入参数 primary_key=True
2、BigAutoField(AutoField) bigint自增列,必须填入参数 primary_key=True
注意:当model中如果没有自增列,则自动会创建一个列名为id的列
3、SmallIntegerField(IntegerField) 小整数 -32768 ~ 32767
4、PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) 正小整数 0 ~ 32767
5、IntegerField(Field) 整数列(有符号的) -2147483648 ~ 2147483647
6、PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) 正整数 0 ~ 2147483647
7、BigIntegerField(IntegerField) 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807
8、BooleanField(Field) 布尔值类型
9、NullBooleanField(Field) 可以为空的布尔值
10、CharField(Field) 字符类型
必须提供max_length参数, max_length表示字符长度
11、TextField(Field) 文本类型
12、EmailField(CharField) 字符串类型
Django Admin以及ModelForm中提供验证机制(即邮件字段,可以验证输入邮件格式是否正确)
13、IPAddressField(Field) 字符串类型
Django Admin以及ModelForm中提供验证 IPV4 机制(即ip字段,可以验证输入IP是否正确)
14、GenericIPAddressField(Field) 字符串类型
Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
参数:
protocol:用于指定Ipv4或Ipv6,其值为:'both',"ipv4","ipv6"
unpack_ipv4:如果指定为True,则输入::ffff:10.0.0.1时候,可解析为10.0.0.1,开启刺功能,需要protocol="both"
15、URLField(CharField) 字符串类型(即邮件字段,可以验证输入的url否是一个合法url)
Django Admin以及ModelForm中提供验证 URL
16、SlugField(CharField) 字符串类型
Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
17、CommaSeparatedIntegerField(CharField) 字符串类型
格式必须为逗号分割的数字
18、UUIDField(Field) 字符串类型
Django Admin以及ModelForm中提供对UUID格式的验证
19、FilePathField(Field) 字符串类型
Django Admin以及ModelForm中提供读取文件夹下文件的功能
参数:
path:文件夹路径
match=None:正则匹配
recursive=False:递归下面的文件夹
allow_files=True:允许文件
allow_folders=False:允许文件夹
20、FileField(Field) 字符串类型
路径保存在数据库,文件上传到指定目录
参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
21、ImageField(FileField) 字符串类型
路径保存在数据库,文件上传到指定目录
参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
width_field=None 上传图片的高度保存的数据库字段名(字符串)
height_field=None 上传图片的宽度保存的数据库字段名(字符串)
22、DateTimeField(DateField)
日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
23、DateField(DateTimeCheckMixin, Field)
日期格式 YYYY-MM-DD
24、TimeField(DateTimeCheckMixin, Field)
时间格式 HH:MM[:ss[.uuuuuu]]
#日期字段常用的参数
auto_now:这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。因此这个参数在需要存储"最后修改时间"的场景下,十分方便。需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被"强制"更新到当前时间,你无法从程序中手动为字段赋值;如果使用django再带的admin管理器,那么该字段在admin中是只读的。如果用django filter的update则是因为直接调用sql语句 不通过 model层, 所以不会自动更新带有auto_now的字段,如果想更新字段;可以通过update(..., update_time=datetime.datime.now())
auto_now_add:这个参数的默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。该属性通常被用在存储"创建时间"的场景下。与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的
25、DurationField(Field) 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
26、FloatField(Field) 浮点型
27、DecimalField(Field) 十进制小数
参数:
max_digits 小数总长度
decimal_places 小数位长度
28、BinaryField(Field) 二进制类型
29、models.ForeignKey(other_table) 创建外键(即创建一对多的表的关联)
参数:
to=: 要进行关联的表名
to_field=: 要关联的表中的字段名称
on_delete=: 当删除关联表中的数据时,当前表与其关联的行的行为
on_delete的参数:
- models.CASCADE 删除关联数据,与之关联也删除
- models.DO_NOTHING 删除关联数据,引发错误IntegrityError
- models.PROTECT 删除关联数据,引发错误ProtectedError
- models.SET_NULL 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
- models.SET_DEFAULT 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
- models.SET 删除关联数据
30、models.ManyToManyField(other_table) 创建多对多的表的关联
31、models.OneToOneField(other_table) 创建一对一的关联
二、字段公用参数
null 数据库中字段是否可以为空
db_column 数据库中字段的列名
db_tablespace 表空间,如果该字段已经创建了索引,那么数据库表空间的名称将作为该字段的索引名。注意,部分数据库不支持表空间
default 数据库中字段的默认值
primary_key 数据库中字段是否为主键
db_index 数据库中字段是否可以建立索引
unique 数据库中字段是否可以建立唯一索引
unique_for_date 数据库中字段【日期】部分是否可以建立唯一索引
unique_for_month 数据库中字段【月】部分是否可以建立唯一索引
unique_for_year 数据库中字段【年】部分是否可以建立唯一索引
verbose_name Admin中显示的字段名称
blank Admin中是否允许用户输入为空
editable Admin中是否可以编辑
help_text Admin中该字段的提示信息
choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
如:course = models.IntegerField(choices=[(0, '云计算'),(1, 'Linux'),],default=1)
error_messages 自定义错误信息(字典类型)从而,定制想要显示的错误信息
字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
如:{'null': "不能为空.", 'invalid': '格式错误'}
validators 自定义错误验证(列表类型),从而定制想要的验证规则(例子如下)
from django.core.validators import RegexValidator
from django.core.validators import EmailValidator,URLValidator,DecimalValidator,MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
test = models.CharField(
max_length=32,
error_messages={
'error1': '错误信息1',
'error2': '错误信息2',
'error3': '错误信息3',
},
validators=[
RegexValidator(regex='root_\d+', message='出错误了', code='e1'),
RegexValidator(regex='root_hehe\d+', message='又出错误了', code='e2'),
EmailValidator(message='又又出错误了', code='e3'),
]
)
三、表创建
1、简单创建表
from django.db import models
class ServerType(models.Model):
serverName = models.CharField(max_length=32, unique=True
2、简单表关联
from django.db import models
class ServerType(models.Model):
serverName = models.CharField(max_length=32, unique=True) class Host(models.Model):
hostname = models.CharField(max_length=32, unique=True)
ip = models.GenericIPAddressField(protocol='ipv4')
servertype = models.ForeignKey(to='ServerType',to_field='id',on_delete=models.CASCADE)
detail = models.TextField()
create_date = models.DateTimeField('创建日期', auto_now_add=True)
mod_date = models.DateTimeField('更新日期', auto_now=True)
四、表操作
1、增
方式一
models.Host.objects.create(hostname='xx',ip='xx',...) #增加一条数据,可以接受字典类型数据 **kwargs
方式二
obj = models.Host(hostname='xx',ip='xx',...)
obj.save()
2、删
models.Host.objects.filter(hostname='xxx').delete() #删除指定条件的数据
3、改
models.Host.objects.filter(hostname='xx').update(ip='xxx') #将指定条件的数据更新,均支持 **kwargs
obj = models.Host.objects.get(id=1)
obj.ip = 'xx'
obj.save() #修改单条数据
4、查
models.Tb1.objects.get(id=1) # 获取单条数据,不存在则报错(不建议使用)
models.Tb1.objects.all() # 获取全部
models.Tb1.objects.filter(name='seven').first() # 获取指定条件的数据
Django之models模块的更多相关文章
- django的models模块查询方法
假定models中有一个类BookInfo 模块查询不同于sql语句,模块查询的结果会返回符合条件的整个一行的对象,或者多个对象组成的查询集. 查询集类似列表,有相似的方法. 1 model查询语句: ...
- django之models模块使用
定义模型 将数据库表定义成类,集成models.Model from django.db import models # Create your models here. class Author(m ...
- 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化
第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...
- 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多
第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多.一对一.多对多 链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.Forei ...
- 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
- 七 Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化
F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from django.db.models import F from django.shortcuts import rende ...
- 五 Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
随机推荐
- php Swoole实现毫秒级定时任务
项目开发中,如果有定时任务的业务要求,我们会使用linux的crontab来解决,但是它的最小粒度是分钟级别,如果要求粒度是秒级别的,甚至毫秒级别的,crontab就无法满足,值得庆幸的是swoole ...
- Yum —— CentOS 下包管理工具 学习笔记
环境:CentOS 7 (阿里云服务器) 一.linux 发行版下的包管理阵营 包管理系统 除了方便你安装和管理包之外,还能帮你解决依赖问题. 下面就介绍2个最主要的: 1.Debian 系 - dp ...
- inventory
1.设置主机的默认inventory mode. 2. 设置自动Populate 数据
- ExtentTestNGIReporterListener
package com.testng.config; import com.aventstack.extentreports.ExtentReports; import com.aventstack. ...
- 记一次 Java 项目 CPU 占用久高不下故障处理
事件背景 公司对接了新系统,代码变动很大,项目也很急,于是在上线之后 Zabbix 不时就告警,提示 CPU 使用过载,告警消息类似如下: 一开始以为是系统停机升级,所有人都等着使用系统,导致系统处理 ...
- centos6.7下安装glibc-2.17
glibc 所有版本下载地址 : http://ftp.gnu.org/pub/gnu/glibc/ 安装先决条件: #yum install gcc libffi-devel python-dev ...
- Prometheus PromQL 简单用法
目录 说明 CPU 内存 磁盘监控 磁盘空间利用率百分比 预计饱和 说明 基于上一篇文章的基础,这里做一些关于 CPU.内存.磁盘的一些基础查询语句. CPU 通过查询 metric值为 node_c ...
- C语言I作业11
C语言 博客作业11 问题 回答 C语言程序设计II 博客作业11 这个作业要求在哪里 作业要求 我在这个课程的目标是 理解和弄懂局部变量和全局变量,静态变量和动态变量 这个作业在哪个具体方面帮助我实 ...
- Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览
本文是Spring Cloud专栏的第一篇文章,了解本篇文章内容有助于更好的理解后面文章 一.网站架构演变过程 1-1.传统架构 传统的SSH架构,分为三层架构 web控制层.业务逻辑层.数 ...
- java基础(3)--详解String
java基础(3)--详解String 其实与八大基本数据类型一样,String也是我们日常中使用非常频繁的对象,但知其然更要知其所以然,现在就去阅读源码深入了解一下String类对象,并解决一些我由 ...