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. C#6.0新特性:var s = $"{12}+{23}={12+23}"

    为什么会出现$符号,c#6.0才出现的新特性 var s = string.Fromat("{0}+{1}={2}",12,23,12+23) 用起来必须输入string.From ...

  2. ERR_UNSAFE_PORT

    报错: 解决办法:

  3. 在jmeter的beanshell中用java获取系统当前时间

    import java.util.*; int y,m,d,h,mi,s; Calendar cal=Calendar.getInstance(); y=cal.get(Calendar.YEAR); ...

  4. 电商类Web原型制作分享——聚美优品

    这是一家化妆品限时特卖商城.作为美妆电商类网站的佼佼者,网站以用户体验为核心,画面主色调符合女性消费者审美.排版整齐,布局合理.网站用弹出面板实现点击弹出内容,鼠标悬停文字按钮颜色改变等交互效果. 本 ...

  5. azman使用笔记

    azman.msc 打开 容易冲突,要用lock 效率问题,可用sql azman

  6. JSONModel简便应用

    JSONModel, Mantle 这两个开源库都是用来进行封装JSON->Model的, 想想看, 直接向服务器发起一个请求,然后回来后,就是一个Model, 直接使用, 这是一个多么美好的事 ...

  7. 48 Fixing relationship Problems with Humor 用幽默解决人际关系问题

    48 Fixing relationship Problems with Humor 用幽默解决人际关系问题 ①We've all heard that laughter is the best me ...

  8. try-catch+thows异常范围说明

    方式一: CatalogPO deleteTarget = null; /** 查询是否存在 **/ deleteTarget = catalogMapper.findByCatalogId(cata ...

  9. 多参数同时运行docker

    docker run --name=newtomcat7 -t -i -p 5000:5000 -v /root/work/docker:/root/hzbtest 93541fa83230 /bin ...

  10. memCachedClient 客户端调用时注意的问题,坑

    // 第三个参数为计算该消息在服务器存放位置用 memCachedClient.add("someKey", "someValue", 10*24*60*60* ...