django admin 筛选器:自定义筛选范围_痴狂一生一世任逍遥的博客-程序员秘密

技术标签: Django  筛选器  

class NumberRangeFilterForm(Form):
    def __init__(self, *args, **kwargs):
        self.field_name = kwargs.pop('field_name')
        super(NumberRangeFilterForm, self).__init__(*args, **kwargs)
        self.fields['%s__gte' % self.field_name] = DecimalField()
        self.fields['%s__lte' % self.field_name] = DecimalField()


class NumberRangeFilter(admin.filters.FieldListFilter):
    template = 'admin/NumberRangeFilter.html'

    def __init__(self, *args, **kwargs):
        field_path = kwargs['field_path']
        self.lookup_kwarg_since = '%s__gte' % field_path
        self.lookup_kwarg_upto = '%s__lte' % field_path
        super(NumberRangeFilter, self).__init__(*args, **kwargs)
        self.form = NumberRangeFilterForm(data=self.used_parameters, field_name=field_path)

    def expected_parameters(self):
        return [self.lookup_kwarg_since, self.lookup_kwarg_upto]

    # no predefined choices
    def choices(self, cl):
        return []

    def queryset(self, request, queryset):
        if self.form.is_valid():
            filter_params = {
                p: self.form.cleaned_data.get(p) for p in self.expected_parameters()
                if self.form.cleaned_data.get(p) is not None
            }
            return queryset.filter(**filter_params)
        else:
            return queryset

自定义模板 template = 'admin/NumberRangeFilter.html'

{% load i18n %}
<span class="range_filter_label">HK$</span><input type="number" class="filter_amount" name="{
   { field_name }}__gte" placeholder="Min. amount" min=0>
<span class="range_filter_center">—</span>
<span class="range_filter_label">HK$</span><input type="number" class="filter_amount" name="{
   { field_name }}__lte" placeholder="Max. amount" min=0>

结果示例:

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38854847/article/details/103824035

智能推荐

Python中optparse模块使用学习_和光同尘ss的博客-程序员秘密

Python 有两个内建的模块用于处理命令行参数:一个是 getopt,《Deep in python》一书中也有提到,只能简单处理 命令行参数;另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。这很类似Linux中一些命令的参数,比如ls -a。optparse模块实现的也是类似的功能,它是为脚本传递命令参数。 示例下面是一个

16道嵌入式C语言面试题_Greens_Ren的博客-程序员秘密

预处理器(Preprocessor)1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)         #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值

论文浅尝 - ICLR2020 | Abductive Commonsense Reasoning_开放知识图谱的博客-程序员秘密

论文笔记整理:毕祯,浙江大学硕士,研究方向:知识图谱、自然语言处理。 链接:https://arxiv.org/pdf/1908.05739.pdf动机尽管长期以来人们一直认为归因是人...

模型论核心定理—紧致性定理_yuanmeng001的博客-程序员秘密

模型论核心定理—紧致性定理上世纪初,罗素悖论把形式语言方法普及开来,基于形式语言的公理化方法遍地开花。在上世纪50年代,一个理论(表现为形式语言的句子集合)有没有相应的数学模型成为研究热点。假定有一个句集∑,其任意有限子集合∑’都有模型,则整个句集∑本身必有模型。这就是模型论中的核心定理,称为“紧致性定理”(Compactnesstheorem)。这个定理很直观,也容易被人接受。但

多元线性回归_两个函数怎么多元回归_Philip.Lau的博客-程序员秘密

一、多元线性回归所谓的多元线性回归就是指在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。二、多元线性回归模型1.建立模型以二元线性回归模型为例 ,二元线性回归模型如下:类似的使用最小二乘法进行参数估计 :2.拟合优度指标标准误差:对y值与模型估计值之间的离差的一种度量。其计算公式为:3.置信范围置信区间的公式为:置信区间=其中, 是自由度为 的 统计量数值...

cad中怎么随意移动图形_AutoCAD2017怎么移动图形 整体拖动图纸教程_weixin_39805255的博客-程序员秘密

AutoCAD2017是一款非常专业的制图软件,那有很多用户表示自己不知道怎么通过这款软件移动图形,下面就通过这篇文章给大家介绍一下,一起往下看吧!1、打开Cad之后,图纸中有几个图形,现在来介绍一下如何移动它们。2、比较通用的方法是:采用移动命令“M”。首先选中要移动的图形。然后输入命令“M”。3、软件会提示:“指定基点”,也就是移动的基点,这时在图中点击选择一个合理的基点。4、软件又会提示:指...

随便推点

本人博客排名(2015年10月1日:第67408名)_weixin_30394981的博客-程序员秘密

本人博客排名目标:进入前3000名2015年10月1日积分 - 500排名 - 67408转载于:https://www.cnblogs.com/hfchenchao/p/4850610.html

Json入门基础、Json常用数据类型、Json语法_king_weng的博客-程序员秘密

1、Json语法规则数据在名称/值对中 数据由逗号分隔 大括号保存对象 中括号保存数组(1)、json名称/值对“name” : “值”(2)、json值可以是数据(整数、浮点数)、字符串(双引号中)、逻辑值(true、false)、数组(中括号中)、对象(大括号中)、null(3)、json数字{“age” : 20}(4)、json对象...

切图html 在线,网页制作/前端开发/网页切图/网站切图/PSD转html_社本的博客-程序员秘密

竭诚合作 成就客户案例:前端开发专业切图服务:1、常规切图——企业、电商、门户等网站常规页面制作;2、快速仿站——提供仿站网址,网站前端全功能模仿;3、响应式页面——网页兼容不同设备,手机、平板、电脑;4、js动画效果——网站局部或全页面动画制作(html5、CSS3、js等技术实现);价格:1.前端切图div css基础排版,普通功能150每页2.响应式切图200每页(不包含多种动画制作,基础排...

Mac电脑必装的10款精品软件(上)_运维贼船的博客-程序员秘密

在我们使用Mac电脑的时候,有很多小工具,不仅能简化操作提高效率,还能提高幸福感,这10款软件帮助你更好的使用你的Mac。Downie 4这是一款网页视频下载神器,通过它可以轻松下载视频网站上面的绝大多数视频,可以说非常方便。 Downie 4支持多款浏览器,安装完插件以后(如果因为网络问题下载失败,请私信联系我),在右上角会出现一个图标。当访问视频网站,点击这个图标就自动下载视频文件了,默认以最高质量下载且速度很快。我这里以哔哩哔哩为例演示。eZipeZip(MacZip)是一

Linux常用命令详解_crazy_xieyi的博客-程序员秘密

Linux常用命令: ls、pwd、cd、touch、cat、mkdir、rm、cp、mv、man、less、head、tail、vim、grep、ps、netstat......