如果記錄的字段很多,獲取所有字段會占用大量內存,因此可以使用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返回的并不是真正的 列表 或 字典,通俗地說,就是用的時候才真正的去數據庫查
如果查詢后沒有使用,在數據庫更新后再使用,得到的是新內容