详解Django的 values_list() 函数:获取指定字段的列表

  • Post category:Python

首先让我们来介绍一下Django中的values_list()函数。

1. 作用

values_list()函数可以方便地从模型实例中提取出指定字段的值,返回一个QuerySet对象。也就是说,该函数可以让你轻松地将数据库中的数据转化为由元组(或者列表)组成的列表(或者QuerySet对象)。

2. 使用方法

values_list()函数的基本使用方法如下:

queryset.values_list(*fields, flat=False, named=False)

这里的参数说明如下:

  • *fields:可选参数,表示要提取的字段名列表;
  • flat:可选参数,当只有一个字段的时候,返回结果是否作为一个二维元组;
  • named:可选参数,是否将结果视作有名元组。

接下来,我们通过实际案例来进一步说明values_list()函数的使用。

2.1 案例一

假设我们有一个叫做Blog的模型,其中包含有博客的标题、作者、阅读量等字段。我们可以使用values_list()函数来获取博客的标题和作者字段值,并将结果转化为由元组组成的列表。

# models.py
class Blog(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)
    read_count = models.IntegerField()

# views.py
from django.http import JsonResponse
from .models import Blog

def blog_titles(request):
    blogs = Blog.objects.values_list('title', 'author')
    return JsonResponse(list(blogs))

在上面的例子中,我们首先导入了JsonResponseBlog模型。然后,我们定义了一个blog_titles视图函数,其中,我们通过Blog.objects.values_list(‘title’, ‘author’)获取了所有博客的标题和作者字段值,并使用了JsonResponse将其返回给了前端。最后,我们使用了list()函数将结果转化为了由元组组成的列表。

2.2 案例二

接下来,我们来看一个更进一步的例子。假设我们现在需要在博客列表页中展示所有博客的标题,作者和阅读量。我们可以使用values_list()函数来获取这些字段的值,并在前端页面展示出来。

# views.py
from django.shortcuts import render
from .models import Blog

def blog_list(request):
    blogs = Blog.objects.values_list('title', 'author', 'read_count')
    return render(request, 'blog_list.html', {'blogs': blogs})

在上面的代码中,我们定义了一个blog_list视图函数,其中,我们通过Blog.objects.values_list(‘title’, ‘author’, ‘read_count’)获取了所有博客的标题、作者和阅读量字段值,并将其传递到了模板文件blog_list.html中展示。

在模板文件中,我们可以使用如下代码将这些字段值展示出来:

{% for blog in blogs %}
    <div class="blog">
        <h3>{{ blog.0 }}</h3>
        <p>作者:{{ blog.1 }}</p>
        <p>阅读量:{{ blog.2 }}</p>
    </div>
{% endfor %}

在上面的代码中,我们使用了{{ blog.0 }},{{ blog.1 }}和{{ blog.2 }}来展示博客的标题、作者和阅读量。

总结

  • values_list()函数可以方便地从模型实例中提取出指定字段的值,返回一个QuerySet对象;
  • 使用values_list()函数时需要传入要提取的字段名列表;
  • 当只有一个字段的时候,可以通过flat参数来控制返回结果是否作为一个二维元组;
  • 可以通过named参数来将结果视作有名元组;
  • values_list()函数对于获取一些特定字段的值非常有用,可以帮助我们更方便地组织和展示数据。