如果记录的字段很多,获取所有字段会占用大量内存,因此可以使用value,和value_list获取指定的字段。
### get,all, filter会获取记录的所有字段
~~~python
v1 = models.Business.objects.all()
返回结果为QuerySet, 元素为对象
# [obj(id,caption,code),obj(id,caption,code),...]
~~~
### value 获取指定的字段
value方法获取指定字段,相当于select 字段1,字段2 from table
~~~
v2 = models.Business.objects.all().values('id','caption')
返回结果为QuerySet,元素为字典
# [{'id':1,'caption': ''},{'id':1,'caption': ''},...]
~~~
### value_list 获取指定的字段
同value,只是获取的元素为元组
~~~
v3 = models.Business.objects.all().values_list('id','caption')
返回结果为QuerySet, 元素为元组
# [(1, ' '),(2, '')]
~~~
如果只需要 1 个字段,可以指定 flat=True,直接显示元素,不再使用元组
~~~
Author.objects.values_list('name', flat=True)
<QuerySet [u'WeizhongTu', u'twz915', u'wangdachui', u'xiaoming']>
~~~
>[danger] lazy evaluation 惰性评估
value_list和value返回的并不是真正的 列表 或 字典,通俗地说,就是用的时候才真正的去数据库查
如果查询后没有使用,在数据库更新后再使用,得到的是新内容