values(*fields)和values_list(*fie
2018-09-11 本文已影响226人
陆_志东
values(*fields)
返回一个ValuesQuerySet查询集,是QuerySet的一个子类,类似pymysql的字典游标,返回的结果是一个列表,列表里面是一个个字典,字典里面就是每个对象的values指定的字段.如果不指定字段,返回全部字段
示例:
# This list contains a Blog object.
>>> Blog.objects.filter(name__startswith='Beatles')
[<Blog: Beatles Blog>]
# This list contains a dictionary.
>>> Blog.objects.filter(name__startswith='Beatles').values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]
>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]
如果你指定的字段是一个外键字段,那么会返回关联模型对象的主键
>>> Entry.objects.values()
[{'blog_id': 1, 'headline': 'First Entry'},{'blog_id': 2, 'headline': 'second Entry'},{'blog_id': 1, 'headline': 'three Entry'}, ...]
>>> Entry.objects.values('blog')
[{'blog': 1}, {'blog': 2},{'blog': 1}, ...]
>>> Entry.objects.filter(headline__startswith="First").values('blog')
[{'blog': 1}]
>>> Entry.objects.values('blog_id')
[{'blog_id': 1}, {'blog_id': 2},{'blog_id': 1}, ...]
values_list(*fields,flat=False)
与values是作用是一样的,只是返回数据的格式不同,values返回的是字典列表,values_list返回元祖列表.元祖是由指定的字段查询到的值组成的,具体请看示例:
>>> Entry.objects.values_list('id')
[(1, ),(2,) ...]
>>> Entry.objects.values_list('id', 'headline')
[(1, 'First entry'), (2,"second entry"),...]
>>> Entry.objects.values_list('id', flat=True).order_by('id')
[1, 2, 3, ...]
警告
上面的flat=True,是以值的数据结构返回,所有注定了flat=True的时候只能指定返回单个字段,如果传递多个字段会出错