Django学习路32_创建管理员及内容补充+前面内容复习
创建管理员 python manage.py createsuperuser



数据库属性命名限制 1.不能是python的保留关键字
2.不允许使用连续的下划线,这是由django的查询方式决定的
3.定义属性时需要指定字段类型,通过字段类型的参数指定选项
语法如下:
属性名=models.字段类型(选项)
字段类型
使用时需要引入django.db.models包,字段类型如下:
AutoField:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性 BooleanField:布尔字段,值为True或False NullBooleanField:支持Null、True、False三种值 CharField(max_length=字符长度):字符串
参数max_length表示最大字符个数 TextField:大文本字段,一般超过4000个字符时使用 IntegerField:整数 DecimalField(max_digits=None, decimal_places=None):十进制浮点数 参数max_digits表示总位数 参数decimal_places表示小数位数 FloatField:浮点数 DateField:[auto_now=False, auto_now_add=False]):日期
参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。
参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误 TimeField:时间,参数同DateField DateTimeField:日期时间,参数同DateField FileField:上传文件字段 ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片
选项: null:如果为True,表示允许为空,默认值是False blank:如果为True,则该字段允许为空白,默认值是False 对比:null是数据库范畴的概念,blank是表单验证证范畴的 db_column:字段的名称,如果未指定,则使用属性的名称 db_index:若值为True, 则在表中会为此字段创建索引,默认值是False default:默认值 primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用 unique:如果为True, 这个字段在表中必须有唯一值,默认值是False。
get() 获取数据的坑
注:之前写过 get():返回表中满足条件的一条且只能有一条数据 如果查到多条数据,则抛异常:MultipleObjectsReturned 查询不到数据,则抛异常:DoesNotExist
判断条件中的 属性列__参数 的补充 1.判等 exact 例:查询编号为1的图书
BookInfo.objects.get(id=1)
BookInfo.objects.get(id__exact=1) 2.模糊查询 contains 例:查询书名包含'传'的图书。contains BookInfo.objects.filter(btitle__contains='传')
例:查询书名以'部'结尾的图书 endswith 开头:startswith
BookInfo.objects.filter(btitle__endswith='部') 3.空查询 isnull select * from booktest_bookinfo where title is not null; 例:查询书名不为空的图书。isnull
BookInfo.objects.filter(btitle__isnull=False) 4.范围查询 in select * from booktest_bookinfo where id in (1,3,5)
例:查询编号为1或3或5的图书。
BookInfo.objects.filter(id__in = [1,3,5]) 5.比较查询
gt 大于
lt 小于
gte 大于等于
lte 小于等于 例:查询编号大于3的图书。
BookInfo.objects.filter(id__gt = 3) 6.日期查询 year 例:查询1980年发表的图书。
BookInfo.objects.filter(bpub_date__year=1980) 例:查询1980年1月1日后发表的图书。
from datetime import date
BookInfo.objects.filter(bpub_date__gt = date(1980,1,1)) 7.返回不满足条件的数据 exclude 例:查询id不为3的图书信息。
BookInfo.objects.exclude(id=3)
F对象
作用:用于类属性之间的比较条件 使用之前需要先导入:
from django.db.models import F 例:查询图书阅读量大于评论量图书信息。
BookInfo.objects.filter(bread__gt = F('bcomment')) 例:查询图书阅读量大于2倍评论量图书信息。
BookInfo.objects.filter(bread__gt = F('bcomment')*2) Q对象
作用:用于查询时的逻辑条件
not and or,可以对Q对象进行&|~操作 使用之前需要先导入:
from django.db.models import Q 例:查询id大于3且阅读量大于30的图书的信息。
BookInfo.objects.filter(id__gt=3, bread__gt=30) BookInfo.objects.filter(Q(id__gt=3)&Q(bread__gt=30)) 例:查询id大于3或者阅读量大于30的图书的信息。
BookInfo.objects.filter(Q(id__gt=3)|Q(bread__gt=30)) 例:查询id不等于3图书的信息。
BookInfo.objects.filter(~Q(id=3))
order_by
QuerySet对象.order_by('属性') 作用:进行查询结果进行排序 例:查询所有图书的信息,按照id从小到大进行排序
BookInfo.objects.all().order_by('id')
BookInfo.objects.order_by('id') 例:查询所有图书的信息,按照id从大到小进行排序。
BookInfo.objects.all().order_by('-id') 例:把id大于3的图书信息按阅读量从大到小排序显示;
BookInfo.objects.filter(id__gt=3).order_by('-bread') 注:
属性上写上 - 号,表示从大到小进行排序
聚合函数
Sum Count Max Min Avg aggregate(聚合函数('属性'))
返回一个字典对象 使用前需先导入聚合类:
from django.db.models import Sum,Count,Max,Min,Avg 例:查询所有图书的数目 Count
BookInfo.objects.aggregate(Count('id'))
返回值类型:
{'id__count': 5} 例:查询所有图书阅读量的总和。
BookInfo.objects.aggregate(Sum('bread'))
{'bread__sum': 126} count函数 返回值是一个数字
作用:统计满足条件数据的数目 例:统计所有图书的数目。
BookInfo.objects.count()
例:统计id大于3的所有图书的数目
BookInfo.objects.filter(id__gt=3).count() 查询相关函数返回值总结:
get:返回一个对象
all:QuerySet 返回所有数据
filter:QuerySet 返回满足条件的数据
exclude:QuerySet 返回不满条件的数据
order_by:QuerySet 对查询结果进行排序
aggregate:字典 进行聚合操作
count:数字 返回查询集中数据的数目
get,filter,exclude参数中可以写查询条件。
查询集特性:
1.惰性查询:
只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询 2.缓存:
当使用的是同一个查询集时,第一次的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个查询集时,使用的是缓存中的结果 限制查询集:
可以对一个查询集进行取下标或者切片操作来限制查询集的结果
b[0]就是取出查询集的第一条数据
b[0:1].get()也可取出查询集的第一条数据 如果b[0]不存在,会抛出IndexError异常 如果b[0:1].get()不存在,会抛出DoesNotExist异常。多条时抛MultiObjectsReturned
对一个查询集进行切片操作会产生一个新的查询集,下标不允许为负数 exists:判断一个查询集中是否有数据 True False
模型类关系
1.一对多关系
例:图书类-英雄类
models.ForeignKey() 定义在多的类中 2.多对多关系
例:新闻类-新闻类型类 体育新闻 国际
models.ManyToManyField() 定义在哪个类中都可以 3.一对一关系
例:员工基本信息类-员工详细信息类. 员工工号
models.OneToOneField定义在哪个类中都可以 关联查询(一对多)
在一对多关系中,一对应的类我们把它叫做一类,多对应的那个类我们把它叫做多类,我们把多类中定义的建立关联的类属性叫做关联属性 例:查询图书id为1的所有英雄的信息。
book = BookInfo.objects.get(id=1)
book.heroinfo_set.all() 通过模型类查询:
HeroInfo.objects.filter(hbook_id=1)
例:查询id为1的英雄所属图书信息。
hero =HeroInfo.objects.get(id=1)
hero.hbook 通过模型类查询:
BookInfo.objects.filter(heroinfo__id=1)

由一类的对象查询多类的时候:
一类的对象.多类名小写_set.all() #查询所用数据
由多类的对象查询一类的时候:
多类的对象.关联属性 #查询多类的对象对应的一类的对象
由多类的对象查询一类对象的id时候:
多类的对象. 关联属性_id
通过模型类实现关联查询: 例:查询图书信息,要求图书中英雄的描述包含'八'
BookInfo.objects.filter(heroinfo__hcomment__contains='八') 例:查询图书信息,要求图书中的英雄的id大于3
BookInfo.objects.filter(heroinfo__id__gt=3) 例:查询书名为“天龙八部”的所有英雄
HeroInfo.objects.filter(hbook__btitle='天龙八部') 通过多类的条件查询一类的数据:
一类名.objects.filter(多类名小写__多类属性名__条件名) 通过一类的条件查询多类的数据:
多类名.objects.filter(关联属性__一类属性名__条件名)
插入、更新和删除 调用模型类对象的save方法实现对模型类对应数据表的插入和更新
调用模型类对象的delete方法实现对模型类对应数据表数据的删除
自关联是一种特殊的一对多关系
管理器
objects
BookInfo.objects.all()
答:objects是Django帮我自动生成的管理器对象
通过这个管理器可以实现对数据的查询
objects是models.Manger类的一个对象
自定义管理器后 Django不再帮我们生成默认的objects管理器 1.自定义一个管理器类,这个类继承models.Manger类
2.再在具体的模型类里定义一个自定义管理器类的对象 自定义管理器类的应用场景:
1.改变查询的结果集
比如调用BookInfo.books.all()返回的是没有删除的图书的数据
2.添加额外的方法
管理器类中定义一个方法帮我们创建对应的模型类对象
使用self.model()就可以创建一个跟自定义管理器对应的模型类对象
元选项 Django默认生成的表名:
应用名小写_模型类名小写。
元选项:
需要在模型类中定义一个元类Meta
在里面定义一个类属性db_table就可以指定表名
2020-05-18
Django学习路32_创建管理员及内容补充+前面内容复习的更多相关文章
- Django学习路15_创建一个订单信息,并查询2020年\9月的信息都有哪些
在 app5.models.py 中添加一个 Order 表 class Order(models.Model): o_num = models.CharField(max_length= 16 ,u ...
- Django学习路13_创建用户登录,判断数据库中账号名密码是否正确
在 models.py 中设置数据库表的信息 from django.db import models # Create your models here. class User(models.Mod ...
- Django学习路10_创建一个新的数据库,指定列名并修改表名
在 models.py 中添加 from django.db import models # Create your models here. class Person(models.Model): ...
- [python][django学习篇][3]创建django web的数据库模型
推荐学习博客:http://pythonzh.cn/post/8/ 博客或者web界面向用户展示内容,它需要从某个地方获取博客内容或者web界面内容,才能够展示出来.通常来说:某个地方指的就是数据库 ...
- Django学习路23_if else 语句,if elif else 语句 forloop.first第一个元素 .last最后一个元素,注释
if else 格式 {% if 条件 %} <标签>语句</标签> {%else%} <标签>语句</标签> {%endif} 标签都可以添加样式 { ...
- Django学习路6_修改数据库为 mysql ,创建mysql及进行迁徙
在项目的 settings 中修改 DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os. ...
- django学习-数据库配置-创建模型
数据库配置 在mysite/settings.py中,包含了django项目设置的python模块 通常,这个配置文件使用SQLite作为默认数据库.如果你不熟悉数据库,或者只是想尝试下django, ...
- django学习-安装、创建应用、编写视图
快速安装指南 py -3 -m pip install django >>> import django >>> django.get_version() '2.2 ...
- Django学习路21_views函数中定义字典及html中使用类实例对象的属性及方法
创建 app6 在项目的 settings 中进行注册 INSTALLED_APPS 里面添加 'app6.apps.App6Config' 在 app6 的models.py 中创建数据表 clas ...
随机推荐
- python基础知识-1
1.python是静态的还是动态的?是强类型还弱类型? python是强类型的动态脚本语言: 强类型:不允许不同类型相加 动态:不使用显示类型声明,且确定一个变量的类型是在第一次给它赋值的时候 脚本语 ...
- 如何基于 echarts 实现区间柱状图(包括横向)?
目录 需求 借鉴 echarts 的 demo 最终实现思路 实现效果 遇到的问题: 代码映射 源码 最后 始终如一 需求 需要利用 echarts 实现区间柱状图,效果如下: 效果来源于:g2-柱状 ...
- stb_image multiple definition of first defined here 多文件包含问题
首先吐槽一下,网上的其他的一些内容都是瞎写,根本没有指出问题的根本原因,使用时出现异常情况不能自己解决也说明了C语言基础不牢固, 该头文件可以分为两种情况使用(推荐使用办法2,办法1中有解释原因)(任 ...
- day30 继承、派生与多态,类中方法和内置函数
目录 一.多继承出现的问题(mixins机制) 二.派生与方法重用 三.多态 1 什么是多态 2 为什么要有多态 3 python中多态的鸭子类型 四.绑定方法与非绑定方法 1 绑定方法 1.1对象的 ...
- 重学 Java 设计模式:实战访问者模式「模拟家长与校长,对学生和老师的不同视角信息的访问场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 能力,是你前行的最大保障 年龄会不断的增长,但是什么才能让你不 ...
- Spring的学习与实战
目录 一.Spring起步 学习路线图 Spring的基础知识 什么是Spring Spring框架核心模块 SpringBoot 第一个Spring应用DEMO 编写自己的第一个SpringMVC例 ...
- hihoCoder 1114 小Hi小Ho的惊天大作战:扫雷·一 最详细的解题报告
题目来源:小Hi小Ho的惊天大作战:扫雷·一 解题思路:因为只要确定了第一个是否有地雷就可以推算出后面是否有地雷(要么为0,要么为1,如果不是这两个值就说明这个方案行不通),如果两种可能中有一种成功, ...
- day6 python while,for 循环控制
1.1双向循环控制流程 i = 0 while i > 10: #外层循环 j = 10 while j < 0: #内层循环 j -= 1 i += 1 1.1.1 双向循环练习---- ...
- db2数据库字段更新当前时间
db2数据库中想要将字段的时间通过sql语句的方式更新: 例如: Update tablename set 字段1='打酱油', 字段2 = TO_CHAR(current timestamp,'YY ...
- Facebook没有测试工程师,如何进行质量控制的?
Facebook从04年的哈佛校园的学生项目在短短的7-8年的时间中快速增长为拥有10亿用户的世界上最大的社交网络,又一次见证了互联网创业成功的奇迹.同时它的产品研发流程也成为了众多互联网产品公司的追 ...