Django动态列表筛选功能的实现与动态查询技巧

橘子海
橘子海
发布时间:2026-10-13 | 5人浏览过
原创

本文介绍在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列表筛选功能的实现代码即为本文分享的全部内容,希望能为读者提供参考,并欢迎大家继续支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表