Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django 进阶学习 - 文本框过滤

Django 进阶学习 - 文本框过滤

作者头像
用户1416054
发布于 2018-08-02 03:52:59
发布于 2018-08-02 03:52:59
1.3K00
代码可运行
举报
文章被收录于专栏:JackeyGao的博客JackeyGao的博客
运行总次数:0
代码可运行

Django 进阶学习 - 文本框过滤

Posted May 03, 2016

默认情况下django可以对列进行过滤, 但大多数是对Relationship列通过list_filter 直接指定field name就可以方便的进行过滤了, 但是如果实现文本框输入过滤属性, 然后通过按钮触发事件后来过滤只能通过自定义Django filter来实现

首先自定义一个filter类

filters.py 默认情况下如果没有filters.py需要在app目录新建此模块, 推荐命名filters.py, 下面这个类是通用的, 所以我们要基于模型的某个字段来定义一个Filter类,继承SingleTextInputFilter(还是在filters.py)

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.contrib.admin import ListFilter
from django.utils.translation import ugettext_lazy as _

class SingleTextInputFilter(ListFilter):
    """
    renders filter form with text input and submit button
    """
    parameter_name = None
    template = "admin/textinput_filter.html"

    def __init__(self, request, params, model, model_admin):
        super(SingleTextInputFilter, self).__init__(
            request, params, model, model_admin)
        if self.parameter_name is None:
            raise ImproperlyConfigured(
                "The list filter '%s' does not specify "
                "a 'parameter_name'." % self.__class__.__name__)

        if self.parameter_name in params:
            value = params.pop(self.parameter_name)
            self.used_parameters[self.parameter_name] = value

    def value(self):
        """
        Returns the value (in string format) provided in the request's
        query string for this filter, if any. If the value wasn't provided then
        returns None.
        """
        return self.used_parameters.get(self.parameter_name, None)

    def has_output(self):
        return True

    def expected_parameters(self):
        """
        Returns the list of parameter names that are expected from the
        request's query string and that will be used by this filter.
        """
        return [self.parameter_name]


    def choices(self, cl):
        all_choice = {
            'selected': self.value() is None,
            'query_string': cl.get_query_string({}, [self.parameter_name]),
            'display': _('All'),
        }
        return ({
            'get_query': cl.params,
            'current_value': self.value(),
            'all_choice': all_choice,
            'parameter_name': self.parameter_name
        }, )

class IpFilter(SingleTextInputFilter):
    """基于IP过滤, 继承SigleTextInputFilter"""
    title = "IP"
    parameter_name = 'ip'  #作用model的字段名
    def queryset(self, request, queryset):
        if self.value():
            return queryset.filter(ip__iexact=self.value()) # 这里自定义过滤条件. self.value() 是文本框输入的值.

自定义filter template

admin/textinput_filter.html, 直接放到本项目的template目录即可, 千万不要放到django包目录下的admin template目录, 如果你了解django 模版检索的过程优先级, 你应该知道我说的意思. 这里我放到$MYAPP/templates/admin/textinput_filter.html位置

HTML

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<h3>{% blocktrans with filter_title=title %} By {{ filter_title }} {% endblocktrans %}</h3>

{#i for item, to be short in names#}
{% with choices.0 as i %}
<ul>
    <li>
        <form method="get">
            <input type="search" name="{{ i.parameter_name }}" value="{{ i.current_value|default_if_none:"" }}"/>

            {#create hidden inputs to preserve values from other filters and search field#}
            {% for k, v in i.get_query.items %}
                {% if not k == i.parameter_name %}
                    <input type="hidden" name="{{ k }}" value="{{ v }}">
                {% endif %}
            {% endfor %}
            <input type="submit" value="{% trans 'apply' %}">
        </form>
    </li>

    {#show "All" link to reset current filter#}
    <li{% if i.all_choice.selected %} class="selected"{% endif %}>
        <a href="{{ i.all_choice.query_string|iriencode }}">
            {{ i.all_choice.display }}
        </a>
    </li>
</ul>
{% endwith %}

最后配置admin.py

admin.py

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from controller.filters import IpFilter

class TriggerAdmin(admin.ModelAdmin):
    empty_value_display = u'无规则'
    list_display = ('__str__', 'id', 'ip', 't_type',
            'get_converge', 'get_switch', 'level')
    search_fields = ('description',)
    list_filter = (IpFilter, 't_type', 'converge_role', 'switch_role', 'level') # 直接把IpFilter类写进去

配置完成

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django+Vue开发生鲜电商平台之6.使用Vue实现商品类别和商品数据前台显示
Github和Gitee代码同步更新: https://github.com/PythonWebProject/Django_Fresh_Ecommerce; https://gitee.com/Python_Web_Project/Django_Fresh_Ecommerce。
cutercorley
2020/07/27
1.7K0
Django 进阶学习 - 动态actions
Django后台默认只有一个动作Delete selected xxxxs, 那么如果自定义动作该怎么办, 也很容易, 直接写个类似于这种的函数
用户1416054
2018/08/02
4230
Django 进阶学习 - 动态actions
django admin 对 list_filter 排序
1. https://cloud.tencent.com/developer/ask/34273
卓越笔记
2023/02/18
5140
django  admin 对 list_filter 排序
Django-admin组件
Django 如何使用admin组件来对后台数据进行管理的? 在每个app下的admin.py文件中进行注册: from app名.models import 模型类名 from django.contrib import admin admin.site.register(模型类名) class 自定义配置类名(admin.ModelAdmin): list_display = ["字段名1","字段名1"]
py3study
2020/01/19
1.8K0
Django-admin组件
Django+Vue开发生鲜电商平台之8.商品详情页功能实现
Github和Gitee代码同步更新: https://github.com/PythonWebProject/Django_Fresh_Ecommerce; https://gitee.com/Python_Web_Project/Django_Fresh_Ecommerce。
cutercorley
2020/07/30
1.2K0
Django+Vue开发生鲜电商平台之8.商品详情页功能实现
Django后台列表的自定义过滤条件显示
IT不难
2023/11/17
3020
Django后台列表的自定义过滤条件显示
django集成django-xadmin
model_icon这个值,在http://fontawesome.io/icons/ 中选中的图标或class内容,如下图
菲宇
2019/06/11
9610
Django REST framework+Vue 打造生鲜超市(五) 六、商品类别数据展示
六、商品类别数据展示 6.1. 商品类别数据接口 (1)商品分类有两个接口: 一种是全部分类:一级二级三级   一种是某一类的分类以及商品详细信息:  开始写商品分类的接口 (2)序列化 给分类添加三
zhang_derek
2018/04/13
2.4K0
Django REST framework+Vue 打造生鲜超市(五)
		六、商品类别数据展示
django Filtering 使用
django-filter是单独的一个库,不属于djangorestframework中的,属于外部库引用进来使用。下面就来介绍下filter
编程黑洞
2023/03/06
7120
django Filtering 使用
Python-Django 第一个Django app
下载地址:https://www.python.org/downloads/release/python-340/
授客
2019/09/11
1.3K0
Python-Django 第一个Django app
Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
Github和Gitee代码同步更新: https://github.com/PythonWebProject/Django_Fresh_Ecommerce; https://gitee.com/Python_Web_Project/Django_Fresh_Ecommerce。
cutercorley
2020/07/27
5.4K0
Django+Vue开发生鲜电商平台之5.使用DRF实现商品列表页和过滤
Python自动化开发学习-Django
django amdin是django提供的一个后台管理页面,该管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查。
py3study
2020/01/09
1.8K0
Python进阶43-drf框架(五)
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
3.2K0
Python进阶43-drf框架(五)
Django 2.1.7 模板语言 - 变量、标签、过滤器、自定义过滤器、模板注释
Django 2.1.7 创建应用模板 Django 2.1.7 配置公共静态文件、公共模板路径
Devops海洋的渔夫
2019/07/01
8530
Django 2.1.7 模板语言 - 变量、标签、过滤器、自定义过滤器、模板注释
python测试开发django-169.过滤器django-filter 入门使用
在管理后台查询的时候,经常有需要查询包含某个内容,按时间段查询,或者商品价格大于多少,小于多少各种查询条件。 django-filter 过滤器专门解决这种查询的问题。
上海-悠悠
2021/11/16
2.3K0
django 自带的admin后台太丑了,可以安装这个模块,django-simpleui 安装使用,报错‘simpletags‘ is not a registered tag解决方法
1 创建一个虚拟环境,在虚拟环境里面执行命令 pip install simpleui 2 在项目中的settings.py文件中加入一行simpleui INSTALLED_APPS = [ 'simpleui', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.me
一写代码就开心
2021/03/23
1.1K0
django 自带的admin后台太丑了,可以安装这个模块,django-simpleui 安装使用,报错‘simpletags‘ is not a registered tag解决方法
Django+Vue开发生鲜电商平台之11.首页、商品数量、缓存和限速功能开发
Github和Gitee代码同步更新: https://github.com/PythonWebProject/Django_Fresh_Ecommerce; https://gitee.com/Python_Web_Project/Django_Fresh_Ecommerce。
cutercorley
2020/08/05
2.2K0
Django+Vue开发生鲜电商平台之11.首页、商品数量、缓存和限速功能开发
Django内置Admin
Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttypes django.contrib.messages django.contrib.sessions 模板的context_processors: django.contrib.auth.context_proce
用户1214487
2018/01/24
1.5K0
Django+xadmin打造在线教育平台(十)
代码 github下载 十四、xadmin的进阶开发 14.1.权限管理 (1)用户权限 超级用户拥有所有权限,其它添加的用户默认没有任何权限 进后台添加一个用户“Editor1”,勾上“职员状态”后
zhang_derek
2018/04/11
2.3K0
Django+xadmin打造在线教育平台(十)
django基本操作命令大全
# 在下载好的django路径下执行django的安装 # https://pypi.python.org/pypi/Django/1.6.4 python3 setup.py install # # 新建django项目 django-admin.py startproject mysite # # 运行django项目 python3 manage.py runserver [port] # # 创建一个app python3 manage.py startapp appname
py3study
2020/01/06
8850
推荐阅读
相关推荐
Django+Vue开发生鲜电商平台之6.使用Vue实现商品类别和商品数据前台显示
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验