zoukankan      html  css  js  c++  java
  • CRM排序——第19天

    1、排序是在过滤了之后进行排序的,在view.py视图里加上

      #排序过后的数据
      object_list,order_key = table_order(request,object_list)
    def display_table_objs(request,app_name,table_name):
    
        print("-->",app_name,table_name)
        #models_module = importlib.import_module('%s.models'%(app_name))
        #model_obj = getattr(models_module,table_name)
        admin_class = kind_admin.enabled_admins[app_name][table_name]
        #admin_class = king_admin.enabled_admins[crm][userprofile]
    
        #object_list = admin_class.model.objects.all()
        object_list,filter_condtions = table_filter(request,admin_class)
    
        #排序过后的数据
        object_list,order_key = table_order(request,object_list)
    
        paginator = Paginator(object_list, admin_class.list_per_page) # Show 25 contacts per page
        print("paginator------",paginator)
        page = request.GET.get('page')
        try:
            query_sets = paginator.page(page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            query_sets = paginator.page(1) ##这个是对你的分页的数据进行取值
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            query_sets = paginator.page(paginator.num_pages)
        print("query_sets------------",query_sets)
        return render(request,"kindadmin/table_objs.html",{"admin_class":admin_class,
                                                            "query_sets":query_sets,
                                                            "filter_condtions":filter_condtions,
                                                           "order_key":order_key})

    上面的table_order函数是在utils.py文件中:

    先判断请求时是否有o这个字段,如果有就先给他排序,为了处理开始点击时是升序排序,再次去点击是降序排序(反转排序),会判断o这个字段请求过来的值(orderby_key)是否是以'-'开头,

    如果是把"-"去掉,如果不是把"-"加上,最后返回排序后的值或者还是原来的值和o字段的值

    order_by(a) #a=正的是升序,负的是降序
    
    order_key.startswith("-") #判断是否一"-"开始的
    
    order_key.strip("-")  #去除“-”这个符号
    def table_order(request,objs):
        """判断请求过来是否有o字段,有就排序"""
        orderby_key = request.GET.get("o")
        if orderby_key:
            objs=objs.order_by(orderby_key)
    
            if orderby_key.startswith("-"):
                orderby_key=orderby_key.strip("-")
            else:
                orderby_key = ("-%s")%orderby_key
        return objs,orderby_key

    2、当o请求的时候,会把o也当成是一个筛选条件,导致排序不成功,处理方法是在请求有o这个字段时就不保存,代码如下在utils.py文件中:

    def table_filter(request,admin_class):
        """进行条件过滤并返回过滤后的数据"""
    
        filter_conditions = {}
        for k,v in request.GET.items():
            if k == 'page' or k == 'o':
                continue
            if v:
                filter_conditions[k]=v
        print("filter_conditions:",filter_conditions)
        print("admin_class.model.objects.filter(**filter_conditions)",admin_class.model.objects.filter(**filter_conditions))
        return admin_class.model.objects.filter(**filter_conditions),filter_conditions

    3、在自定义标签tag.py文件中定义个函数返回页面值

      3.1点击排序会有一个图标向上或者向下,可以在bootstrap里面直接复制过来如: 

    icon = '''<span class="glyphicon glyphicon-triangle-top" aria-hidden="true"></span>'''
    icon = '''<span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span>'''

    可能这两个图标加载不出来,下载bootstrap的源码,把里面的内容拷到statics/fonts文件下

           3.2  在tag.py文件里面定义一个函数判断返回前端页面的显示

      3.2.1 判断请求的参数o(order_key)是否有值,如有再判断是否是以“-“开头的,则

        icon = '''<span class="glyphicon glyphicon-triangle-top" aria-hidden="true"></span>'''

        如果不是一"-"开头的则:

                icon = '''<span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span>'''

    在次判断如果请求过来的o()order_key)等于字段值就显示icon图标,如果不等于就不显示icon图标

    如果请求过来的order_key是None,那么也是不显示icon图标

    因为当在页面筛选时也能排序,所以在<a>标签的href里面拼接参数

    代码如下:

    @register.simple_tag
    def build_reverse_order(column,order_key,filter_condtions):
        """页面排序展示交换反转"""
        sel_ele = ""
        for k, v in filter_condtions.items():
            sel_ele+= "&%s=%s" %(k, v)
        ele = '''<th><a href="?{sel_ele}&o={order_key}">{column}</a>
                    {icon}
                </th>
        '''
        if order_key:
    
            if order_key.startswith("-"):
                icon = '''<span class="glyphicon glyphicon-triangle-top" aria-hidden="true"></span>'''
            else:
                icon = '''<span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span>'''
    
            if order_key.strip("-") == column or order_key == column:
                order_key=order_key
    
            else:
                order_key=column
                icon = ""
        else:
            order_key = column
            icon=""
        ele = ele.format(order_key=order_key, column=column,icon=icon,sel_ele=sel_ele)
    
        return mark_safe(ele)

    在返回到客户信息表重新点击进去的时候会报错,order_key是None,没有strip()这个属性,然后我在build_reverse_order函数加了一个order_key是否有值的判断,比视频早发现并改了有一点点的开心吧。嗯逻辑处理和思路还是得加强

        

  • 相关阅读:
    autocomplete自动完成搜索提示仿google提示效果
    实现子元素相对于父元素左右居中
    javascript 事件知识集锦
    让 IE9 以下的浏览器支持 Media Queries
    「2013124」Cadence ic5141 installation on CentOS 5.5 x86_64 (limited to personal use)
    「2013420」SciPy, Numerical Python, matplotlib, Enthought Canopy Express
    「2013324」ClipSync, Youdao Note, GNote
    「2013124」XDMCP Configuration for Remote Access to Linux Desktop
    「2013115」Pomodoro, Convert Multiple CD ISO to One DVD ISO HowTo.
    「2013123」CentOS 5.5 x86_64 Installation and Configuration (for Univ. Labs)
  • 原文地址:https://www.cnblogs.com/venvive/p/11329253.html
Copyright © 2011-2022 走看看