Python/Django中如何对数据库过滤结果按名称、描述升序排序?
Django过滤后按多字段升序排序解决方案
嘿,我来帮你搞定这个排序需求~首先先提个小细节:你代码里的description_icontains少了个双下划线,应该是description__icontains,不然运行会报错哦!
要实现先按Name升序、再按Description升序的排序,只需要在你的QuerySet后面链式调用order_by()方法就行,Django里默认就是升序排序,直接传入字段名就可以,多个字段用逗号分隔,优先级按传入顺序来。
修改后的完整代码
query = request.GET.get('q') if query: # 先修正过滤条件的语法错误,再添加order_by实现排序 data = Data.objects.filter( Q(name__icontains=query) | Q(description__icontains=query) ).distinct().order_by('name', 'description')
额外说明
- 如果之后需要降序排序,只需要在字段名前加负号,比如要按Name降序、Description升序,就写
order_by('-name', 'description') distinct()方法要放在filter()之后、order_by()之前,这样排序才会生效(Django的QuerySet链式调用顺序要注意,order_by会影响distinct的结果,不过这里你的场景下这个顺序是没问题的)
内容的提问来源于stack exchange,提问作者PKA
相关产品推荐
相关产品推荐

