1. 作用与使用方法
Django的values_list()
函数是QuerySet对象的一个方法,其作用是以元组的形式返回QuerySet中若干字段的值,可以用于生成一些简单的报表或者用于序列化JSON数据。values_list()
函数的用法如下:
values_list(*fields, flat=False)
其中,fields
参数指定需要返回的字段列表,可以是一个具体的字段值,也可以是通过一个列表包含多个字段值。flat
参数决定返回的结果是否是一个平铺的一维列表。如果指定flat=True
,则values_list()
函数返回的结果是一个一维列表,否则返回的是一个二维元组。
2. 实例说明
示例一
例如,有一个名为Author
的模型,包含有名字、国籍等字段,需要查询作者的名字和国籍。那么可以使用values_list()
函数来实现这一需求。具体的代码如下:
from myapp.models import Author
authors = Author.objects.all().values_list('name', 'country')
for author in authors:
print(author)
实际上,上面的代码等效于下面使用values()函数的代码:
authors = Author.objects.all().values('name', 'country')
for author in authors:
print((author['name'], author['country']))
示例二
再比如,有一个名为Book
的模型,包含有书名、作者和出版日期等字段,需要查询作者、出版日期和书名,然后将结果导出为CSV文件。代码实现如下:
import csv
from myapp.models import Book
from django.http import HttpResponse
def export_books_csv(request):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="books.csv"'
writer = csv.writer(response)
books = Book.objects.values_list('author__name', 'published_date', 'title')
writer.writerow(['Author', 'Published date', 'Title'])
for book in books:
writer.writerow(book)
return response
其中,Book.objects.values_list('author__name', 'published_date', 'title')
查询了所有图书的作者、出版日期和书名字段;writer.writerow(book)
则将每本书的这些字段写入CSV文件。该函数会下载一个名为books.csv
的CSV文件。