django

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的时候只能指定返回单个字段,如果传递多个字段会出错

上一篇 下一篇

猜你喜欢

热点阅读