zoukankan      html  css  js  c++  java
  • 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': '你好 '}
    <class 'dict'>
    {'title': '中国吸引力', 'content': '精彩极了 '}
    <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': '最新文章 '}
    <class 'dict'>
    {'title': '中国吸引力', 'category__name': '最新文章 '}
    <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': '最新文章 '}
    <class 'dict'>
    {'title': '中国吸引力', 'cate_name': '最新文章 '}
    <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()中只传递一个字段的情况下

    始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
  • 相关阅读:
    昆石VOS3000_2.1.4.0完整安装包及安装脚本
    KVPhone,VOS官方的SIP软电话电脑客户端
    昆石VOS2009 VOS3000无漏洞去后门电脑管理客户端大全
    2017年最新(4月20日)手机号码归属地数据库分享
    2017年最新VOS2009/VOS3000最新手机号段导入文件(手机归属地数据)
    Android:onNewIntent()
    三星S4使用体验(Markdown版)
    apple公司的潮起潮落——浪潮之巅
    microsoft的罗马帝国——浪潮之巅
    我的iOS开发之路
  • 原文地址:https://www.cnblogs.com/guyan-2020/p/12268175.html
Copyright © 2011-2022 走看看