django2.0 Queryset的方法 values(只获取指定字段的值),values_list,all()


发布时间:2019-02-15 13:08    作者: Uncle Hui   已过去:1 年,5 月   阅读总量:222 已被赞:0


values:用来指定在提取数据出来,需要提取哪些字段。默认情况下会把表中所有的字段全部都提取出来,可以使用values来进行指定,并且使用了values方法后,提取出的QuerySet中的数据类型不是模型,而是在values方法中指定的字段和值形成的字典:需要什么字段,就在values()的括号里写入,例如:values("title",'content'),返回结果是一个字典。如果values()括号里什么都写,就会返回全部字段的值。

 articles = Article.objects.values("title",'content')
 for article in articles:
     print(article)

以上打印出来的article是类似于{"title":"abc","content":"xxx"}的形式。
如果在values中没有传递任何参数,那么将会返回这个模型中所有的属性。

如果我要提取这么模型相关联的模型字段数据,就使用:模型名小写+__“字段”的形式,例如要查Article模型里,boo所关联的Book模型里的name就这样写:

articles = Article.objects.values("title",'content','book__name')

for article in articles:

   print(article)

查询的结果是个字典,'book__name'可以指定一个自定义名字(自定义的名字不能与模型上的名字重复),使用F+关键字参数形式,例如:

articles = Article.objects.values("title",'content',zidiyimingzi=F('book__name'))


values也可以使用聚合函数,例如:

b=Book.objects.values('id','name',xiaoliang=Count("bookorder.id")


values_list:类似于values。只不过返回的QuerySet中,存储的不是字典,而是元组。示例代码如下:

 articles = Article.objects.values_list("id","title")
 for i in articles:
    print(i)
print(articles)

那么在打印articles后,结果为<QuerySet [(1,'abc'),(2,'xxx'),...]>等。
如果在values_list中只有一个字段。那么你可以传递flat=True来将结果扁平化。示例代码如下:

扁平化就是说,返回一个字符串,不带元组的括号,但是要注意,使用扁平化时,values_list()的括号里,只能传入一个字段(参数)!多了就会报错。

 articles1 = Article.objects.values_list("title")
 >> <QuerySet [("abc",),("xxx",),...]>
 articles2 = Article.objects.values_list("title",flat=True) (扁平化操作例子)
 >>“三国演义”

all:获取这个ORM模型的全部QuerySet对象。

点赞

0




登陆后方可评论