CRM手记-7 | Django

Posted 胡说八道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CRM手记-7 | Django相关的知识,希望对你有一定的参考价值。

# 综合排序,分页,过滤展示
    # 即可以排序后,再过滤,又可以过滤后,再排序,最后分页;
    # 1.在筛选的基础之上排序
    #     筛选后的参数添加到排序的链接中;
        # table_obj_list.html
            {% get_filter_param admin_class %}
        # kingadmin_tag.py
            # 排序链接中添加筛选参数,先筛选再排序
            @register.simple_tag
            def get_filter_param(admin_class,):
                filter_param = ‘‘
                # 根据获取筛选条件的字典来判断,是否有筛选
                if admin_class.filter_condtions:
                    for k,v in admin_class.filter_condtions.items():
                        filter_param += &%s=%s%(k,v)

                return filter_param
    # 2.在排序的基础之上筛选
    #     将排序参数_o添加到筛选的提交表单;
    #     生成一个隐藏标签;放入当前排序字段;
        # table_obj_list,html
            <input type="hidden" name="_o" value="{{ current_order_field.keys.0 }}">
            # 因为过滤功能一个提交表单,所以只要将name与value提交上去,就会添加到url中;
            # 因为在python3中keys()返回的是一个迭代器,而不是列表,所以上面没有返回值;
        # 写一个simple_tag;
        # kingadmin_tag.py
            # 获取当前排序字段
            @register.simple_tag
            def get_order_field(current_order_field):
                # 将迭代器转换成列表,展示的字段名及索引
                return list(current_order_field.values())[0]
        # 排序结果对过滤查询就影响吗?
        # 没有,只是一个URL上参数展示,表示操作已执行的状态;
        # 报错:list out of range
        # 原因:默认是没有排序的,但是值取了;
            # kingadmin_tag.py
            @register.simple_tag
            def get_order_field(current_order_field):
                # 如果有排序,则返回,没有就返回空;
                return list(current_order_field.values())[0] if current_order_field else ‘‘
    # 3.注意一点,分页我们用的是第三方库pure-pagination,它对django自带的
    #    pagination做了一些增强功能的封装,生成的链接{{page.querystring}}
    #     会自动在其他功能的基础之上添加参数,与分页;

 

以上是关于CRM手记-7 | Django的主要内容,如果未能解决你的问题,请参考以下文章

CRM手记-1 | Django

CRM手记-2 | Django

CRM手记-5 | Django

CRM手记-4 | Django

CRM手记- 11 | Django

CRM手记-8 | Django