美文网首页Python Web开发学习
【CRM客户关系管理】12.查询结果分页、排序、过滤组合

【CRM客户关系管理】12.查询结果分页、排序、过滤组合

作者: 吾星喵 | 来源:发表于2018-12-04 09:44 被阅读0次

个人博客,欢迎查看:https://blog.starmeow.cn/

Github地址:https://github.com/xyliurui/DjangoCRM

排序和过滤组合

table_detail(request, app_name, model_name)视图中,将筛选字典保存到了全局注册类中admin_class.filter_conditions = filter_conditions,只需要知道admin_class就可以得到筛选字典

将筛选字典拼接链接

@register.simple_tag
def render_filter_args(admin_class):
    """拼接过滤的字段"""
    if admin_class.filter_conditions:
        tmp = ''
        for k, v in admin_class.filter_conditions.items():
            tmp += '&{}={}'.format(k, v)
        return mark_safe(tmp)
    return ''

模板中链接增加筛选字段

在a标签中排序后面增加{% render_filter_args admin_class %}用于拼接筛选字段

{% if admin_class.list_display %}
    {% for display_field in admin_class.list_display %}
        <th>
            <a href="?_order={% get_sorted_data display_field current_order_field forloop.counter0 %}{% render_filter_args admin_class %}">
                {{ display_field }} {% get_sorted_arrow display_field current_order_field forloop.counter0 %}
            </a>
        </th>
    {% endfor %}
{% else %}
    {% build_table_head_name admin_class %}
{% endif %}
image.png

进行筛选,然后排序,此时的链接变成 http://127.0.0.1:8000/djadmin/crm/customerinfo/?_order=-5&consultant=2&created_time__gte=2018-11-06

过滤和分页组合

分页模块增加过滤字段

修改djadmin应用下的templates/includes/pagination.html文件,在每个a标签后面增加{% render_filter_args admin_class %}

{% load djadmin_tags %}
<ul class="pagination pagination-sm m-0 float-right">
    {% if page.number > 1 %}
        <li class="page-item"><a class="page-link" href="?page=1{% render_filter_args admin_class %}" aria-label="">首页</a></li>
    {% endif %}

    {% if page.has_previous %}
        <li class="page-item"><a class="page-link" href="?page={{ page.previous_page_number }}{% render_filter_args admin_class %}">&laquo;</a></li>
    {% endif %}

    {%  for pg in page.paginator.page_range %}
        {% if page.number == pg %}
            <li class="page-item active"><a class="page-link" href="?page={{ pg }}{% render_filter_args admin_class %}">{{ pg }}</a></li>
        {% elif pg > page.number|add:'-3' and pg < page.number|add:'3' %}
            <li class="page-item"><a class="page-link" href="?page={{ pg }}{% render_filter_args admin_class %}">{{ pg }}</a></li>
        {% endif %}
    {% endfor %}

    {% if page.has_next %}
            <li class="page-item"><a class="page-link" href="?page={{ page.next_page_number }}{% render_filter_args admin_class %}">&raquo;</a></li>
    {% endif %}

    {% if page.number != page.paginator.num_pages %}
        <li class="page-item"><a class="page-link" href="?page={{ page.paginator.num_pages }}{% render_filter_args admin_class %}" aria-label="">尾页</a></li>
    {% endif %}
</ul>

分页、排序、过滤组合

一般是先进行筛选过滤,然后排序,再分页。这样就只需要在分页上加入排序的字段。

修改分页模块增加排序字段

修改pagination.html文件,增加排序的字段&_order={{ current_order_num }}

{% load djadmin_tags %}
<ul class="pagination pagination-sm m-0 float-right">
    {% if page.number > 1 %}
        <li class="page-item"><a class="page-link" href="?page=1&_order={{ current_order_field }}&_order={{ current_order_value }}{% render_filter_args admin_class %}" aria-label="">首页</a></li>
    {% endif %}

    {% if page.has_previous %}
        <li class="page-item"><a class="page-link" href="?page={{ page.previous_page_number }}&_order={{ current_order_value }}{% render_filter_args admin_class %}">&laquo;</a></li>
    {% endif %}

    {%  for pg in page.paginator.page_range %}
        {% if page.number == pg %}
            <li class="page-item active"><a class="page-link" href="?page={{ pg }}&_order={{ current_order_value }}{% render_filter_args admin_class %}">{{ pg }}</a></li>
        {% elif pg > page.number|add:'-3' and pg < page.number|add:'3' %}
            <li class="page-item"><a class="page-link" href="?page={{ pg }}&_order={{ current_order_value }}{% render_filter_args admin_class %}">{{ pg }}</a></li>
        {% endif %}
    {% endfor %}

    {% if page.has_next %}
            <li class="page-item"><a class="page-link" href="?page={{ page.next_page_number }}&_order={{ current_order_value }}{% render_filter_args admin_class %}">&raquo;</a></li>
    {% endif %}

    {% if page.number != page.paginator.num_pages %}
        <li class="page-item"><a class="page-link" href="?page={{ page.paginator.num_pages }}&_order={{ current_order_value }}{% render_filter_args admin_class %}" aria-label="">尾页</a></li>
    {% endif %}
</ul>

详情模板包含的分页模块

传递参数current_order_num=current_order_field.consult_content

<div>
    {% include 'includes/pagination.html' with page=queryset current_order_value=current_order_value %}
</div>

详情视图排序索引

由于current_order_field返回的是一个字典,需要获取其中的值

@login_required
def table_detail(request, app_name, model_name):
    """取出指定model里的数据返回到前端"""
    # 拿到admin_class后,通过它获取model
    admin_class = site.enable_admins[app_name][model_name]
    # print(admin_class)  # 执行djadmin.py定义的注册模型类
    queryset = admin_class.model.objects.all()
    # print(queryset)

    # 进行过滤
    queryset, filter_conditions = get_filter_result(request, queryset)
    # 将过滤字典保存到全局注册类中
    admin_class.filter_conditions = filter_conditions

    # 排序,返回排序的结果和排序的字段字典
    queryset, current_order_field = get_order_result(request, queryset, admin_class)
    # print(current_order_field)  # {'consult_content': '4'}
    # 如果有排序,保存排序的值,用于模板中在分页模块显示
    if current_order_field.values():
        current_order_value = list(current_order_field.values())[0]
    else:
        current_order_value = ''

    # 查询集结果分页
    paginator = Paginator(queryset, 10)  # Show 10 contacts per page
    page = request.GET.get('page')
    try:
        queryset = paginator.get_page(page)
    except PageNotAnInteger:
        queryset = paginator.get_page(1)
    except EmptyPage:
        queryset = paginator.get_page(paginator.num_pages)

    return render(request, 'djadmin/table_detail.html', locals())
image.png

此时链接: http://127.0.0.1:8000/djadmin/crm/customerinfo/?source=&consultant=2&status=1&created_time__gte=2018-11-01

image.png

此时链接: http://127.0.0.1:8000/djadmin/crm/customerinfo/?_order=-5&consultant=2&status=1&created_time__gte=2018-11-01

image.png

此时链接: http://127.0.0.1:8000/djadmin/crm/customerinfo/?page=1&_order=-5&consultant=2&status=1&created_time__gte=2018-11-01

相关文章

  • 【CRM客户关系管理】12.查询结果分页、排序、过滤组合

    个人博客,欢迎查看:https://blog.starmeow.cn/ Github地址:https://gith...

  • MongoDB 条件查询和排序

    MongoDB 提供了丰富的查询功能,包括条件组合、反向查询、查询结果过滤、排序等,借助 MongoDB 多样化的...

  • Java 反射获取父类的字段字: NoSuchFieldExce

    在开发中,经常要存在需要将数据收集过来然后在内存中进行过滤,排序,分页的情况。写了一个过滤,排序,分页的工具,结果...

  • 基本操作

    一、介绍 二、增删改查 三、排序查询 四、分页查询 五、bool查询 六、按条件过滤查询 七、短语检索 八、高亮检索

  • CRM竞品分析-纷享销客

    CRM背景 CRM为客户关系管理,CRM系统则是通过技术手段,线上去做客户关系的管理,CRM系统的目标是通过提高客...

  • 1.5建立顾客关系

    1.5.1客户关系管理(customer relationship management,CRM) 客户关系管理是...

  • 2018-10-19医院客户关系管理有哪些优势

    医院客户关系管理(CRM) 医院客户关系管理(Customer Relationship Management,简...

  • 2020-03-01

    第7章 商品搜索 学习目标 根据搜索关键字查询 条件筛选 规格过滤 价格区间搜索 分页查询 排序查询 高亮查询 1...

  • 像查询DB一样查询redis

    设计目的:希望查询redis缓存像查询数据库一样,支持多条件组合查询、模糊查询、区间查询、多字段排序查询、分页查询...

  • CRM

    CRM(Customer Relationship Management)即客户关系管理,指企业用CRM技术来管理...

网友评论

    本文标题:【CRM客户关系管理】12.查询结果分页、排序、过滤组合

    本文链接:https://www.haomeiwen.com/subject/fzopcqtx.html