一、字段

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模块的更多相关文章

  1. django的models模块查询方法

    假定models中有一个类BookInfo 模块查询不同于sql语句,模块查询的结果会返回符合条件的整个一行的对象,或者多个对象组成的查询集. 查询集类似列表,有相似的方法. 1 model查询语句: ...

  2. django之models模块使用

    定义模型 将数据库表定义成类,集成models.Model from django.db import models # Create your models here. class Author(m ...

  3. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

  4. 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多

    第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多.一对一.多对多 链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.Forei ...

  5. 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  6. 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  7. 七 Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from django.db.models import F from django.shortcuts import rende ...

  8. 五 Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  9. 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

随机推荐

  1. C语言程序设计100例之(17):百灯判亮

    例17   百灯判亮 问题描述 有序号为1.2.3.….99.100的100盏灯从左至右排成一横行,且每盏灯各由一个拉线开关控制着,最初它们全呈关闭状态.有100个小朋友,第1位走过来把凡是序号为1的 ...

  2. Google Chrome浏览器的编码格式的修改步骤

    Chrome  Charset插件 大二萌新正在学JavaEE,当学到TomCat时,用到浏览器,但是呢,出现了中文乱码的情况,而又用的是Google,可烦恼了,由于Google Chrome的更新, ...

  3. windows 10 上源码编译opengv | compile opengv on windows 10 from source

    本文首发于个人博客https://kezunlin.me/post/51cd9fa0/,欢迎阅读! compile opengv on windows 10 from source Series co ...

  4. 利用tomcat搭建图片服务器

    今天来教大家如何使用 tomcat 来搭建一个图片的服务器 1.先将tomcat解压一份并改名 2.此时apache-tomcat-8.5.43-windows-x64-file为图片服务器 依次打开 ...

  5. SpringBoot学习(六)—— springboot快速整合RabbitMQ

    目录 Rabbit MQ消息队列 简介 Rabbit MQ工作模式 交换机模式 引入RabbitMQ队列 代码实战 Rabbit MQ消息队列 @ 简介 优点 erlang开发,并发能力强. 社区活跃 ...

  6. 【NHOI2018】黑格覆盖

    [题目描述] 在一张由 M * N 个小正方形格子组成的矩形纸张上,有 k 个格子被涂成了黑色.给你一张由 m * n 个同样小正方形组成的矩形卡片,请问该卡片最多能一次性覆盖多少个黑格子? [输入数 ...

  7. 高效PHP Redis缓存技术,可参考下步骤

    是否想过PHP使用redis作为缓存时,如何能: 前后台模块共用Model层: 但是,不能每个Model类都进行缓存,这样太浪费Redis资源: 前后台模块可以自由决定从数据库还是从缓存读数据: 没有 ...

  8. 环境配置——tornado项目准备工作

    新建tornado项目后,采用Pycharm作为开发工具,采用Xshell链接Ubuntu模拟服务端方便方便测试.项目编码前进行以下几个方面的配置. 1.Ubuntu配置 1.1安装ssh服务 sud ...

  9. tensorflow:模型的保存和训练过程可视化

    在使用tf来训练模型的时候,难免会出现中断的情况.这时候自然就希望能够将辛辛苦苦得到的中间参数保留下来,不然下次又要重新开始. 保存模型的方法: #之前是各种构建模型graph的操作(矩阵相乘,sig ...

  10. Spring Boot整合Mybatis报错InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider

    Spring Boot整合Mybatis时一直报错 后来发现原来主配置类上的MapperScan导错了包 由于我使用了通用Mapper,所以应该导入通用mapper这个包