1.list页面:筛选功能优化,显示choices,传condition过滤筛选项
list_filter = [
    # sites.FilterOption("name",False,lambda x:x.name,lambda x:x.name),#这种配置无意义
    sites.FilterOption("consultant",False,condition=Q(depart=1)),#传条件以显示筛选项
    sites.FilterOption("gender",False),#choices
]
显示choices主要逻辑:如果_field.choices有值,就把_field.choices当做data_list送上去显示,而condition筛选则是不似以前无脑all()将表中对象全部显示.
def gen_list_filter(self):
 
    for option in self.model_config.list_filter:
 
        if option.is_func:
            data_list = option.field_or_func(self.model_config,self,option)
        else:
            _field = self.model_config.model_class._meta.get_field(option.field_or_func)
 
            if isinstance(_field, ForeignKey):
                data_list = FilterRow(option, self, _field.rel.model.objects.filter(option.get_condition), self.model_config.request.GET)
            elif isinstance(_field, ManyToManyField):
                data_list = FilterRow(option, self, _field.rel.model.objects.filter(option.get_condition), self.model_config.request.GET)
            elif hasattr(_field,"choices") and _field.choices:
                # print(_field.choices) #((1, '男'), (2, '女'))
                data_list = FilterRow(option, self, _field.choices, self.model_config.request.GET,is_choices=True)
            else:
                data_list = FilterRow(option, self, _field.model.objects.filter(option.get_condition), self.model_config.request.GET)
 
        yield data_list
 
option.get_condition:
@property
def get_condition(self):
    if self.condition:
        return self.condition
    else:
        return Q()

2.list页面筛选与显示同步--后端获取搜索条件执行搜索返回--model_class._meta._get_fields()包含类中最全的字段.

filter_condition:获取搜索条件
@property
def filter_condition(self):
    # filed1 = [i.name for i in self.model_class._meta.fields]
    # print(filed1)
    # print('------------------')
    #
    # filed2 = [i.name for i in self.model_class._meta.many_to_many]
    # print(filed2)
    # print('------------------')
 
    filed3 = [i.name for i in self.model_class._meta._get_fields()]#包含的字段最全
    # print(filed3)
    # print('------------------')
 
    con = {}
    for k in self.request.GET:
        if k not in filed3:
            continue
        v = self.request.GET.getlist(k)
        k = "%s__in"%k
        con[k]=v
 
    return con

list页面-按照choice筛选丶传condition过滤筛选项丶筛选与显示同步的更多相关文章

  1. SharePoint 2010 ——自定义上传页面与多文件上传解决方案

    最近项目遇到一个很麻烦的问题,原以为很容易解决,结果搞了那么久,先开个头,再慢慢写 SharePoint 2010 ——自定义上传页面与多文件上传解决方案 1.创建Sharepoint空白项目,创建应 ...

  2. Flutter 路由 页面间跳转和传参 返回

    Navigator Navigator用来管理堆栈功能(即push和pop),在Flutter的情况下,当我们导航到另一个屏幕时,我们使用Navigator.push方法将新屏幕添加到堆栈的顶部.当然 ...

  3. flutter页面间跳转和传参-Navigator的使用

    flutter页面间跳转和传参-Navigator的使用 概述 flutter中的默认导航分成两种,一种是命名的路由,一种是构建路由. 命名路由 这种路由需要一开始现在创建App的时候定义 new M ...

  4. DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样

    '近日有本论坛网友问:DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样 '今晚正好闲着没事,加之以前也没用到过这个需求,所以就写了个模拟功能,供各位坛友酌情参考. ...

  5. vue实现部分页面导入底部 vue配置公用头部、底部,可控制显示隐藏

    vue实现部分页面导入底部 vue配置公用头部.底部,可控制显示隐藏 在app.vue文件里引入公共的header 和 footer header 和 footer 默认显示,例如某个页面不需要显示h ...

  6. iOS10 开发权限适配设置 崩溃(上传打包后构建版本一直不显示)

    ios10 系统必须强制配置系统权限 如果不配置,调试的时候导致崩溃,还会引发包无效的问题,导致上传打包后构建版本一直不显示 解决方案1.在项目中找到info.plist文件,右键点击以 Source ...

  7. springmvc使用数组接收页面商品列表批量删除传过来的参数,并完成批量删除的操作。

    1.1 需求 在商品列表页面选中多个商品,然后删除. 1.2 需求分析 此功能要求商品列表页面中的每个商品前有一个checkbox,选中多个商品后点击删除按钮把商品id传给controller,根据商 ...

  8. day105:Mofang:设置页面初始化&更新头像/上传头像&设置页面显示用户基本信息

    目录 1.设置页面初始化 2.更新头像 1.点击头像进入更新头像界面 2.更新头像页面初始化 3.更新头像页面CSS样式 4.头像上传来源选择:相册/相机 5.调用api提供的本地接口从相册/相机提取 ...

  9. 让Android中的webview支持页面中的文件上传

    android webview在默认情况下是不支持网页中的文件上传功能的: 如果在网页中有<input type="file" />,在android webview中 ...

随机推荐

  1. MVC仓储使用join

    代码: var result = from mpc in this.Context.Set<Domain.S_MENU_PURVIEWCODE>() join menu in this.C ...

  2. MapReduce调优总结与拓展

    本文为<hadoop技术内幕:深入解析MapReduce架构设计与实现原理>一书第9章<Hadoop性能调优>的总结. 图1 Hadoop层次结构图 从管理员角度进行调优 1. ...

  3. Laravel 开启跨域请求

    项目中用到了接口,外部调用的时候老是请求不到,本地请求却没问题,查了下说是因为跨域的问题.根据网上所说解决方法如下: 1.建立中间件Cors.php命令:php artisan make:middle ...

  4. linux(rhel) rescue修复详解

    修复linux,先准备好一张安装光盘,光驱安装好后开机,选择从光驱启动.等待安装盘显示操作界面时选择"rescue"选项,如果有光标提示的话,也可以输入:linux rescue进 ...

  5. 外网不能访问阿里云服务器的apache服务

    今天弄了下Ubuntu的服务器,配置了一个LAMP环境的服务器,配置有时间我再来说 但是配置了很长的时间,差不都怕是好几个小时 在配置apache的时候,出现了问题,好不容易把apache服务配置好 ...

  6. iOS与PHP/Android AES128 ECB NoPadding加密

    前言 谈谈AES加密,网上有很多的版本,当我没有真正在加密安全问题前,总以为百度出来某个AES加密算法就可以直接使用,实际上当我真正要做加密时,遇到了很多的坑,原来不是拿过来就能用的.写下本篇文章,记 ...

  7. 『jQuery』.html(),.text()和.val()的使用

    『jQuery』.html(),.text()和.val()的使用 2013-04-21 10:25 by 我是文东, 8335 阅读, 0 评论, 收藏, 编辑 本节内容主要介绍的是如何使用jQue ...

  8. hdu-1166(线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 思路:线段树模板 #include<iostream> #include<cs ...

  9. addEvent兼容版

    function addEvent(elem,type,handle){ if (elem.addEventlistener) { elem.addEventlistener(type,handle, ...

  10. python3中 for line1 in f1.readlines():,for line1 in f1:,循环读取一个文件夹

    循环读取一个文件: fr.seek(0) fr.seek(0, 0) 概述 seek() 方法用于移动文件读取指针到指定位置. 语法 seek() 方法语法如下: fileObject.seek(of ...