Django动态列表筛选功能的实现与动态查询技巧
本文介绍在Django中实现前端列表动态筛选及后端动态查询的方法。通过解析request.GET参数,结合Django ORM的filter特性,利用字典解包(**kwargs)构建灵活的查询条件。示例展示了如何根据前端传入的任意字段组合,动态生成SQL查询语句,避免硬编码多个查询逻辑,提升代码复用性与维护性。
Django动态列表筛选功能的实现与动态查询技巧
在视图(views)模块中,首先需明确处理请求的类型。
视图层请求类型处理
class LawDetailView(View):
def get(self, request, law_id):
type = request.GET.get('type', '')
law = Law.objects.get(id=law_id)
return render(request, 'zcfg-detail.html', {
'law': law,
'type': type,
})
在模板(templates)文件中,配置前端页面的交互元素。
模板层前端交互配置
<div class="col-lg-12" style="margin-bottom: 20px;">
<a class="{% if type == '' %}btn btn-danger{% else %}btn btn-default{% endif %}" href="?type=" rel="external nofollow" role="button">全部</a>
<a class="{% if type == 'fl' %}btn btn-danger{% else %}btn btn-default{% endif %}" href="?type=fl" rel="external nofollow" role="button">法律</a>
<a class="{% if type == 'xzfg' %}btn btn-danger{% else %}btn btn-default{% endif %}" href="?type=xzfg" rel="external nofollow" role="button">行政法规</a>
<a class="{% if type == 'bmgz' %}btn btn-danger{% else %}btn btn-default{% endif %}" href="?type=bmgz" rel="external nofollow" role="button">部门规章</a>
<a class="{% if type == 'dfgz' %}btn btn-danger{% else %}btn btn-default{% endif %}" href="?type=dfgz" rel="external nofollow" role="button">地方规章</a>
</div>
Django动态查询技巧
补充知识:Django中一种便捷实现动态查询的方法。
问题背景
问题背景
开发过程中常遇到此类场景:前端页面提供查询功能,输入选项包括A、B、C等。用户可通过任意单一选项进行查询,也可通过任意组合条件进行筛选。
在后端代码中,可通过request.GET['A']获取用户传入的具体数值。
若需判断哪些字段有输入值,再分别执行不同的数据库查询逻辑,会导致代码冗余且维护困难。
解决方案
解决方案
通过动态构建查询参数实现灵活查询。
动态构建查询参数
kwargs = {}
if A is not None:
kwargs['name__startWith'] = A
if B is not None:
kwargs['address__contains'] = B
if C is not None:
kwargs['mobile__endWith'] = C
...
...
personList = Person.objects.filter(**kwargs)
...
注意:
A、B、C等变量代表从前端传输过来的数据值。
name、address、mobile等字符串需对应数据库中待查询表的实际属性字段名。
startWith、contains、endWith等为Django ORM中定义的筛选规则后缀。
Person为对应的Model模型类名称。
以上关于Django列表筛选功能的实现代码即为本文分享的全部内容,希望能为读者提供参考,并欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









