八、Django分组查询
分组查询、F查询和Q查询
分组查询
统计每个出版社出版的书籍的平均价格
第一种方式
1 | obj = models.Book.objects.values('publishs_id').annotate(a=Avg('price')) |
第二种方式
1 | obj = models.Publish.objects.annotate(a=Avg('book__price')) |
F查询
F查询一般用于单表两个字段比较
示例表
1 | class Book(models.Model): |
1 | ##查询点赞数大于评论数的数据 |
Q查询
一般用于OR关系(filter语句中时and关系)
1 | #查询评论数或点赞数大于40的书籍 |
你可以组合&
和|
操作符以及使用括号进行分组来编写任意复杂的Q
对象。同时,Q
对象可以使用~
操作符取反,这允许组合正常的查询和取反(NOT
) 查询:
1 | bookList=Book.objects.filter(Q(authors__name="yuan") & ~Q(publishDate__year=2017)).values_list("title") |
查询函数可以混合使用Q 对象
和关键字参数。所有提供给查询函数的参数(关键字参数或Q
对象)都将"AND”在一起。但是,如果出现Q
对象,它必须位于所有关键字参数的前面。例如:
1 | bookList=Book.objects.filter(Q(publishDate__year=2016) | Q(publishDate__year=2017), |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小康博客!
评论
TwikooWaline