only与defer
需求1:只取某n列。
1、values得出列表嵌套字典
queryset=[ {},{}]
models.User.objects.all().values( 'id','name')
2、values_list得出列表嵌套元组
queryset=[ (),()]
models.User.objects.all().values_list( 'id','name')
3、only得出列表嵌套对象
queryset=[ obj,obj]
result = models.User.objects.all().only('id','name','age')
通过for循环取值
for item in reuslt:
print(item.id,item.name,item.age)
4、defer排除某些字段
result = models.User.objects.all().defer('id','name','age')
selected_related:连表查询
需求2:打印所有用户姓名以及部门名称
现有两张表,用户与部门是多对一的关系
class depart:
title = ....
class User:
name = ...
dp = FK(depart)
方法1:
先查所有用户,再跨表查部门名称 —— 这样性能很低!
# select * from user result = models.User.objects.all()
for item in result:
print(item.name,item.dp.title) # 这样做跨表性能非常低
方法2:
使用selected_related进行连表查询
# select * from user left join depart on user.dp_id = depart.id
result = models.User.objects.all().selected_related('dp')
for item in result:
print(item.name,item.dp.title )