一 only
only只查询指定字段,查询后的数据类型是 对象。所以是通过 . 调用字段。返回的结果仍然可以调用,没有指定的字段。这种情况下,查询的效率较低。
PS values('xx')
查询后的数据类型是字典,所有是通过 obj [' xx '] ,以这种方式取值。 字段如果不在values中,查询结果会报错。
示例:
def test(request): obj_list1 = models.Teacher.objects.all().only('name') for item in obj_list1: print(item.title,type(item)) obj_list2 = models.Teacher.objects.all().values('name') for item in obj_list2: print(item['name'],type(item)) return HttpResponse('ok')
输出:
讲师 <class 'app01.models.Teacher'> [13/Mar/2018 20:10:33] "GET /test/ HTTP/1.1" 200 2 讲师 <class 'app01.models.Teacher'> alex <class 'dict'> egon <class 'dict'>
二 defer,与only正好相反。不取某些字段值。
三 F查询
http://www.bubuko.com/infodetail-2416159.html
需求:书的价格全部加20
def test(request): models.Book.objects.update(price=F('price')+20) return HttpResponse('ok')
显示:
四 Q查询
http://www.cnblogs.com/linjiqin/p/3817814.html
def test(request): lists = models.Teacher.objects.filter(Q(name__startswith='a')) print(lists) return HttpResponse('ok')
显示:
<QuerySet [<Teacher: alex>]>