81.常用的返回QuerySet对象的方法使用详解:values和values_list
values: 指定提取的数据库表中的字段值,如果不指定任何的字段名的话,默认情况下会提取所有的字段值。但是需要注意的是使用values返回的QuerySet对象中包括的是一个个的字典。
1.提取与Article形成映射关系的表article中的属性的所有值。示例代码如下:
def index7(request):
    articles = Article.objects.values('title', 'content')
    print(type(articles))
    for article in articles:
        print(article)
        print(type(article))
    return HttpResponse("success!")
输出结果如下:
<class 'django.db.models.query.QuerySet'>
{'title': 'Hello', 'content': '你好'}
<class 'dict'>
{'title': 'Hello World', 'content': '大家好'}
<class 'dict'>
{'title': '钢铁是怎样炼成的', 'content': '你好\r\n'}
<class 'dict'>
{'title': '中国吸引力', 'content': '精彩极了\r\n'}
<class 'dict'>
2. 提取与Article模型相关联的模型Category上的属性name的所有值。示例代码如下:
from django.http import HttpResponse
from .models import Article, Category
def index7(request):
	articles = Article.objects.values('title','category__name')
	# 打印出articles的数据类型
	print(type(articles))
	for article in articles:
		print(article)
		# 遍历QuerySet中的每一篇文章,并且打印出其数据类型:字典类型
		print(type(article))
	return HttpResponse('success')
输出打印结果:
<class 'django.db.models.query.QuerySet'>
{'title': 'Hello', 'category__name': '最新文章\r\n'}
<class 'dict'>
{'title': '中国吸引力', 'category__name': '最新文章\r\n'}
<class 'dict'>
{'title': 'Hello World', 'category__name': '最热文章'}
<class 'dict'>
{'title': '钢铁是怎样炼成的', 'category__name': '高评分文章'}
<class 'dict'>
3. 如果想要为QuerySet中字典的键进行重新命名的话,就要使用到F表达式和关键字参数了,因为F表达式可以动态的获取字段的值。示例代码如下:
# 自定义的名字cate_name不能和Article模型上的属性相同
articles = Article.objects.values('title', cate_name=F('category__name'))
查看返回的结果如下:
{'title': 'Hello', 'cate_name': '最新文章\r\n'}
<class 'dict'>
{'title': '中国吸引力', 'cate_name': '最新文章\r\n'}
<class 'dict'>
{'title': 'Hello World', 'cate_name': '最热文章'}
<class 'dict'>
4. 在values()中也可以使用聚合函数形成一个新的字段,比如想要获取每个文章的销量。示例代码如下:
from django.db import F, Q
# 获取每篇文章的销量(阅读量)
articles = Article.objects.values('title', art_nums=Count('category__id'))
5. values_list():和values()用法相同,不同的地方就是,前者返回的是元组而后者返回的是字典。示例代码如下:
articles = Article.objects.values_list('title', Count('category__id'))
6. values_list(): 如果只传递一个字段名,这个是后再返回一个元组的话,就不太好了,可以通过指定falt=True,来使元组扁平化,拆分元组。示例代码如下:
articles = Article.objects.values_list('title', flat=True)
返回结果如下:
Hello
Hello World
钢铁是怎样炼成的
中国吸引力
需要注意的是, flat参数只能要用在values_list()中只传递一个字段的情况下
81.常用的返回QuerySet对象的方法使用详解:values和values_list的更多相关文章
- 82.常用的返回QuerySet对象的方法使用详解:all,select_related
		
1. all: 返回这个ORM模型的QuerySet对象. articles = Article.objects.all() print(articles) 2.select_related: 查找数 ...
 - 85.常用的返回QuerySet对象的方法使用详解:defer,only
		
defer(),only(): 这两个方法都会返回一个"QuerySet"对象,并且这个"QuerySet"中装的是模型,不像values()和values_l ...
 - 84.常用的返回QuerySet对象的方法使用详解:select_related, prefetch_related
		
1.select_related: 只能用在一对多或者是一对一的关联模型之间,不能用在多对多或者是多对一的关联模型间,比如可以提前获取文章的作者,但是不能通过作者获取作者的文章,或者是通过某篇文章获取 ...
 - 79.常用的返回QuerySet对象的方法使用详解: filter, exclude,annotate
		
返回新的QuerySet的常用方法: 1.filter: 将满足条件的数据提取出来,返回一个新的QuerySet 以下所使用的模型article,category,定义模型models.py文件中,示 ...
 - 80.常用的返回QuerySet对象的方法使用详解:order_by
		
order_by: 将模型生成的表按照某个字段进行排序,默认情况下,按照升序的顺序排序,如果想要按照降序的顺序排序可以在字段的前面加一个"-",加一个负号就可以进行反转. mode ...
 - asp.net中C#对象与方法 属性详解
		
C#对象与方法 一.相关概念: 1.对象:现实世界中的实体 2. 类:具有相似属性和方法的对象的集合 3.面向对象程序设计的特点:封装 继承 多态 二.类的定义与语法 1.定义类: 修饰符 类名称 ...
 - js对象浅拷贝和深拷贝详解
		
js对象浅拷贝和深拷贝详解 作者:i10630226 字体:[增加 减小] 类型:转载 时间:2016-09-05我要评论 这篇文章主要为大家详细介绍了JavaScript对象的浅拷贝和深拷贝代码,具 ...
 - 2020你还不会Java8新特性?方法引用详解及Stream 流介绍和操作方式详解(三)
		
方法引用详解 方法引用: method reference 方法引用实际上是Lambda表达式的一种语法糖 我们可以将方法引用看作是一个「函数指针」,function pointer 方法引用共分为4 ...
 - Underscore _.template 方法使用详解
		
为什么用「void 0」代替「undefined」 undefined 并不是保留词(reserved word),它只是全局对象的一个属性,在低版本 IE 中能被重写. 事实上,undefined ...
 
随机推荐
- spring boot 2.18
			
@SpringBootAppliction: 标注在某个类,则是springboot的主配置类,springboot就运行这个类的main方法启动springboot; @SpringBootConf ...
 - JS: 复选框——ALL与A、B、C(选中ALL同时选中各子项)
			
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title> ...
 - 清除windows激活信息
			
1.管理员运行命令提示符 在命令提示符中输入 slmgr /upk---删除当前KMS密匙 出现"成功地卸载了产品密匙"后,继续依次执行下面两个命令 slmgr /ckms---此 ...
 - B. Email from Polycarp
			
B. Email from Polycarp time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
 - Android studio 中出现fail to load platform rendering library
			
解决方法: 1)将布局的API接口改为低版本的(如蓝色箭头所示) 2)改为真机测试
 - S7-300位逻辑指令仿真练习 停车场
			
第三章 S7-300 指令应用 位逻辑指令 M存储器 在PLC中M存储区(也称位存储区,又称内部存储器标志位(M)存储器区),它属于系统存储区.在你选定具体的CPU型号后,可以查看CPU的技术规格,其 ...
 - Ican协议建立连接我的感悟
			
有一个情形我突然之间想明白了. 注意下面情形: 假设节点A与节点B已经 正常的建立了连接,并且进行了通讯. 假设 节点B收到了 节点A 的 &q ...
 - centos7上安装mysql8
			
话不多说仍然是更换虚拟机的系列安装. 一.首先下载最先版的mysql.到官网下载https://dev.mysql.com/downloads/file/?id=477146 下载后上传linux到相 ...
 - 2 —— js语法 —— 对象和方法的声明  。变量提升。闭包
			
一,声明对象 var obj1 = {}; var obj2 = {name:'kk',age:18,fun:function{ // name,age,fun为对象的属性,只是属性 ...
 - Elasticsearch全文搜索引擎-PHP使用教程。
			
1.声明依赖关系: 比方说,你的项目中需要一个php版的elasticsearch框架.为了将它添加到你的项目中(下载),你所需要做的就是创建一个 composer.json 文件,其 ...