QuerySet方法的主要功能是查询,用于查询后台数据库中的信息,通过manage.py可以shell进去看到一些条件来查询。
而且我们在views.py中写的一些方法,比如获取文章列表,获取文章详情页。都是通过这个来的。
不过在views.py中没有看到相关语句,是在模板中吗???
一、Shell环境下调用QuerySet(先练习一下命令,看看效果。)
调用Django_Api使用QuerySet,需要利用到一级mysite目录下的***manage.py***。
一级mysite目录下运行cmd命令:
***python manage.py shell***进入shell环境,
***python manage.py***通过这个命令可以看看都有啥命令
如果有虚拟环境的话,要先在shell环境下进入虚拟环境
ORM技术:对象关系映射,对象映射数据库
这个应该可以将在前端发布的数据添加到后台
1、创建对象(shell环境,命令提示符下)
(1)引用
from django.contrib.auth.models import User
from blog.models import Post
(2)获取用户——get user
user=User.object.get(username=‘admin’)
可以再输入一下user看看结果,结果是 User:admin
(3)实例化一个Post类——Post object——其实就是发布了一篇文章
post=Post.objects.create(title=‘shell test’,slug=‘stest’,body=‘post test’,author=user)
title=‘shell test’ 代表标题名
slug=‘stest’ 代表文章名
body=‘post test’ 代表文章内容
author=user 代表作者
可以再输入一下post看看结果,结果是 <Post:shell test>
(4)保存到数据库
post.save()
运行一下服务器,打开后台后,可以看到新发布了一条标题为shell test的文章。
2、更新对象(shell环境,命令提示符下)
post.title='hello’
将刚才文章标题改为hello
3、获取对象(shell环境,命令提示符下)
post.objects.all()
data=post.objects.all()
for i in data:
print(i)
post.objects.all()代表获取所有对象
data就是将对象遍历了一下,也可以输入data[1] 、 data[7] 等
二、QuerySet的常用方法
filter() —— 数据集查询的函数,过滤符合条件的
excluede() —— 过滤不符合条件的
order_by() —— 排序
all() —— 所有的queryset
get() —— 获取唯一元素,不唯一会报错
first() —— 获取第一个元素
last() —— 获取最后一个元素
exists() —— 检查某条记录是否存在
update() —— 更新字段
delete() —— 删除指定记录
create() —— 创建
save() —— 保存
三、再举几个例子
1、查询
查询发布时间是2018年的
Post.objects.filter(publish_year=2018)
查询发布时间是2018年,且作者是admin的
Post.objects.filter(publish_year=2018,auther_username=‘admin’)
查询发布时间是2018年,且作者不是admin的
Post.objects.filter(publish_year=2018).exclude(author_username=‘admin’)
之前在第三节课,编辑models.py文件时有定义
时间问题:
publish=models.DateTimeField(default=timezone.now)#发布时间,默认为当前日期。
publish是发布时间,有年月日,所有publish_year就是发布的年
作者问题:
author=models.ForeighKey(User,related_name=“blog_posts”)#作者就是登陆用户,是个外键,等一下要定义用户表,从那里边找数据,多对一的方式。
User这个表有什么办法可看到吗?username是他的某一个列吗??
2、排序
用title正向排序
Post.objects.order_by(‘title’)
用title反向排序,加个减号
Post.objects.order_by(’-title’)
3、删除方法
分两步:
先查询,确认唯一性,
post=Post.objects.get(id=4)
然后再删除
post.delete()
4、QuerySet方法,创建一个用户
user=User.objects.create(Username=‘test’)
user.save()