zoukankan      html  css  js  c++  java
  • Django项目:CRM(客户关系管理系统)--24--16PerfectCRM实现King_admin日期过滤

    登陆密码设置参考

    http://www.cnblogs.com/ujq3/p/8553784.html

    list_filter = ('date','source','consultant','consult_courses',)

    list_filter = ('date','source','consultant','consult_courses',)

    
    

      1 # kingadmin_tags.py
      2 
      3 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
      4 
      5 # # 因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。
      6 # from django import template #模板
      7 # register = template.Library() #模板库
      8 #
      9 # @register.simple_tag #Django中利用filter与simple_tag为前端自定义函数的实现方法
     10 # def get_app_name(model_obj):
     11 #
     12 #     # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
     13 #     # return model_obj._meta.verbose_name_plural
     14 #     '''
     15 #      #判断 数据库 里如果有  verbose_name  或者  verbose_name_plural 就 调用  如果都没有 就使用默认的(英文)
     16 #         class Meta:
     17 #         verbose_name = "04客户信息表"           #在 Django  Admin 里 表名显示中文 但是会加s
     18 #         verbose_name_plural = "04客户信息表"    #在 Django  Admin 里 表名显示中文 不会加s
     19 #     '''
     20 #     model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural
     21 #     if not model_name:
     22 #         model_name = model_obj._meta.model_name
     23 #
     24 #     return model_name
     25 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
     26 
     27 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
     28 
     29 # ————————07PerfectCRM实现King_admin显示注册的表————————
     30 # 因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。
     31 from django import template  # 模板
     32 
     33 register = template.Library()  # 模板库
     34 
     35 
     36 @register.simple_tag  # Django中利用filter与simple_tag为前端自定义函数的实现方法
     37 def get_model_verbose_name(model_obj):
     38     '''
     39      #判断 数据库 里如果有  verbose_name  或者  verbose_name_plural 就 调用  如果都没有 就使用默认的(英文)
     40         class Meta:
     41         verbose_name = "04客户信息表"           #在 Django  Admin 里 表名显示中文 但是会加s
     42         verbose_name_plural = "04客户信息表"    #在 Django  Admin 里 表名显示中文 不会加s
     43     '''
     44     model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural
     45     if not model_name:
     46         model_name = model_obj._meta.model_name
     47     return model_name
     48 
     49 
     50 @register.simple_tag
     51 def get_model_name(model_obj):
     52     return model_obj._meta.model_name
     53 
     54 
     55 @register.simple_tag
     56 def get_app_name(model_obj):
     57     return model_obj._meta.app_label
     58 
     59 
     60 # ————————07PerfectCRM实现King_admin显示注册的表————————
     61 
     62 
     63 # ————————09PerfectCRM实现King_admin显示注册表的内容————————
     64 from django.utils.safestring import mark_safe  # 使用mark_safe函数标记后,django将不再对该函数的内容进行转义
     65 
     66 
     67 @register.simple_tag
     68 def build_table_row(admin_obj, obj):  # 通过kingadmin_tags在后台处理 再传到前端
     69     row_ele = ""  # 为了生成一整行返回前端
     70     if admin_obj.list_display:  # 如果不为空,有在crm/kingadmin.py注册site.register(models.Customer,CustomerAdmin)
     71         # 循环所有 要显示 的字符串 进行反射 展示 字段
     72         for column in admin_obj.list_display:  # 循环base_admin里class BaseAdmin下list_display = ()
     73             column_obj = obj._meta.get_field( column )  # 遍历获取  传进的参数对象
     74 
     75             if column_obj.choices:  # 判断如果字段有choices属性
     76                 # 获取choices的字符串(外健)
     77                 get_column_data = getattr( obj, "get_%s_display" % column )  # 反射,传进的参数对象,拼接字段
     78                 column_data = get_column_data()  # 函数,拿到数据
     79             else:
     80                 column_data = getattr( obj, column )  # 反射,
     81             # ————————10PerfectCRM实现King_admin日期优化————————
     82             if type( column_data ).__name__ == 'datetime':
     83                 column_data = column_data.strftime( '%Y-%m-%d %H-%M-%S' )
     84             # ————————10PerfectCRM实现King_admin日期优化————————
     85 
     86             td_ele = '''<td>%s</td>''' % column_data  # 把反射来的值 拼接字符串 生成<td>
     87             row_ele += td_ele  # 把 <td>  拼接到上面到空字符串
     88     else:
     89         row_ele += "<td>%s</td>" % obj  # 把<td>拼接到上面到空字符串,crm/models.py里 def __str__(self):的返回值
     90     return mark_safe( row_ele )  # 使用mark_safe函数标记后,django将不再对该函数的内容进行转义
     91 
     92 
     93 # ————————09PerfectCRM实现King_admin显示注册表的内容————————
     94 
     95 
     96 # ————————13PerfectCRM实现King_admin分页页数————————
     97 # 分页功能kingadmin/templates/kingadmin/table_data_list.html里 <a href="?page={{ page }}{%  generate_filter_url admin_obj %}">{{ page }}
     98 @register.simple_tag
     99 def generate_filter_url(admin_obj):  # 拼接URL
    100     url = ''
    101     for k, v in admin_obj.filter_condtions.items():
    102         url += "&%s=%s" % (k, v)
    103     return url
    104 
    105 
    106 # ————————13PerfectCRM实现King_admin分页页数————————
    107 
    108 # ————————14PerfectCRM实现King_admin分页的省略显示————————
    109 # 分页的省略显示
    110 @register.simple_tag
    111 def pag_omit(request, admin_obj):  # 传入当前页面值
    112     rest = ''  # 大字符串
    113 
    114     # ————————15PerfectCRM实现King_admin多条件过滤————————
    115     filters = generate_filter_url( admin_obj )  # 分页
    116     # ————————15PerfectCRM实现King_admin多条件过滤————————
    117 
    118     add_tags = False  # 标志位
    119     for pages in admin_obj.querysets.paginator.page_range:
    120         #   前两页    或   后  两页                                       或    当前页的前后页
    121         if pages < 3 or pages > admin_obj.querysets.paginator.num_pages - 2 or abs(
    122                         admin_obj.querysets.number - pages ) <= 2:
    123             # 样式
    124             add_tags = False
    125             ele_class = ''  # 颜色
    126             if pages == admin_obj.querysets.number:  # --如果是当前页码,颜色加深 不进链接跳转--
    127                 ele_class = "active"  # 颜色加深
    128 
    129             # ————————15PerfectCRM实现King_admin多条件过滤————————
    130             # rest+='''<li class="%s"><a href="?page=%s">%s</a></li>'''%(ele_class,pages,pages)  #--拼接URL--
    131             rest += '''<li class="%s"><a href="?page=%s%s">%s</a></li>''' % (
    132             ele_class, pages, filters, pages)  # --拼接URL--
    133             # ————————15PerfectCRM实现King_admin多条件过滤————————
    134         else:
    135 
    136             if add_tags == False:  # 如果不是标志位的页面
    137                 rest += '<li><a>...</a></li>'
    138                 add_tags = True  # 标志位为真
    139 
    140     return mark_safe( rest )  # 使用mark_safe函数标记后,django将不再对该函数的内容进行转义
    141 
    142 
    143 # ————————14PerfectCRM实现King_admin分页的省略显示————————
    144 
    145 
    146 
    147 # # ————————15PerfectCRM实现King_admin多条件过滤————————
    148 # #多条件过滤  table_data_list.html 传递参数
    149 # @register.simple_tag
    150 # def get_filter_field (filter_column,admin_obj):
    151 #     print("admin obj",admin_obj.model ,filter_column)
    152 #     field_obj = admin_obj.model._meta.get_field(filter_column)#调用内置方法
    153 #     select_ele = """<select name="%s"> """ %filter_column #拼接成下拉框返回
    154 #     for choice in field_obj.get_choices():#循环获取crm/models里class Customer(models.Model):下source_choices = ((0,'转介绍'),
    155 #         selected_condtion = admin_obj.filter_condtions.get(filter_column)
    156 #         if selected_condtion != None: #if None, 没有过滤这个条件
    157 #             print("heoe....",filter_column,selected_condtion,type(selected_condtion))#类型是 整数
    158 #             if selected_condtion == str(choice[0]): #就是选择的这个条件,整数转字符串
    159 #                 selected = "selected"
    160 #             else:
    161 #                 selected = ""
    162 #         else:
    163 #             selected = ""
    164 #
    165 # #在前端把几个条件提交到后台,后台拿着条件变成一个字典,然后进行过滤,把数据返回前端,并且把条件作为字典返回后端,因为要在前端显示已经过滤的条件。
    166 #         option_ele = """<option value="%s" %s>%s</option> """ % (choice[0],selected,choice[1])
    167 #         select_ele +=option_ele
    168 #     select_ele += "</select>"
    169 #     return mark_safe(select_ele)
    170 # # ————————15PerfectCRM实现King_admin多条件过滤————————
    171 
    172 # # ————————16PerfectCRM实现King_admin日期过滤————————
    173 
    174 from django.utils.timezone import datetime, timedelta
    175 
    176 @register.simple_tag
    177 def get_filter_field(filter_column, admin_obj):
    178     select_ele = """<select name='{filter_column}'><option  value="">---------</option>"""  # 标签 字符串 #拼接成下拉框返回
    179     field_obj = admin_obj.model._meta.get_field( filter_column )  # 调用内置方法
    180     selected = ''
    181     if field_obj.choices:
    182         for choice_item in field_obj.choices:
    183             if admin_obj.filter_condtions.get( filter_column ) == str( choice_item[0] ):
    184                 selected = "selected"
    185             select_ele += """<option value="%s" %s>%s</option> """ % (choice_item[0], selected, choice_item[1])
    186             selected = ""
    187 
    188     if type( field_obj ).__name__ in ['ForeignKey', 'ManyToManyField','OneToOneField']:#外健属性
    189         for choice_item in field_obj.get_choices()[1:]:
    190             if admin_obj.filter_condtions.get( filter_column ) == str( choice_item[0] ):  # 就是选择的这个条件,整数转字符串
    191                 selected = "selected"
    192             select_ele += """<option value="%s" %s>%s</option> """ % (choice_item[0], selected, choice_item[1])
    193             selected = ''
    194 
    195     if type( field_obj ).__name__ in ['DateTimeField', 'DateField']:  # 如果是时间格式
    196         date_els = []  # 日期条件项
    197         today_ele = datetime.now().date()  # 今天日期
    198         date_els.append( ['今天', today_ele] )  # 今天
    199         date_els.append( ['昨天', today_ele - timedelta( days=1 )] )  # 昨天
    200         date_els.append( ['近7天', today_ele - timedelta( days=7 )] )  # 一周
    201         date_els.append( ['近30天', today_ele - timedelta( days=30 )] )  # 三十
    202         date_els.append( ['本月', today_ele.replace( day=1 )] )  # 本月
    203         date_els.append( ['近90天', today_ele - timedelta( days=90 )] )  # 90天
    204         date_els.append( ['近365天', today_ele - timedelta( days=365 )] )  # 365天
    205         date_els.append( ['本年', today_ele.replace( month=1, day=1 )] )  ##今年
    206 
    207         for choice_item in date_els:
    208             if admin_obj.filter_condtions.get( "%s__gte" % filter_column ) == str( choice_item[1] ):
    209                 selected = 'selected'
    210             select_ele += """<option value="%s" %s>%s</option> """ % (choice_item[1], selected, choice_item[0])
    211             selected = ''
    212         filter_column_name = "%s__gte" % filter_column
    213     else:
    214         filter_column_name = filter_column
    215 
    216     select_ele += "</select>"
    217     select_ele = select_ele.format( filter_column=filter_column_name )  # 格式化时间的判断条件
    218     return mark_safe( select_ele )
    219     # ————————16PerfectCRM实现King_admin日期过滤————————
    # kingadmin_tags.py

    过滤条件 不同写法

     1 # # ————————16PerfectCRM实现King_admin日期过滤————————
     2 from django.utils.timezone import datetime, timedelta
     3 
     4 
     5 #过滤条件
     6 @register.simple_tag
     7 def get_filter_field (filter_column,admin_obj):#过滤条件
     8     print("admin obj",admin_obj.model ,filter_column)
     9     field_obj = admin_obj.model._meta.get_field(filter_column)
    10     select_ele = """<select class="form-control" name='{filter_column}'>""" #标签 字符串
    11     #if type(field_obj).__name__=='ForeignKey':
    12 
    13     if type(field_obj).__name__ in ['DateTimeField','DateField']:#如果是时间格式
    14         date_els=[]#日期条件项
    15         today_ele=datetime.now().date()#今天日期
    16         date_els.append(['today_ele',today_ele])#今天
    17         date_els.append(['yesterday_ele',today_ele-timedelta(days=1)])#昨天
    18         date_els.append(['last7day_ele',today_ele-timedelta(days=7)])#一周
    19         date_els.append(['last30day_ele',today_ele-timedelta(days=30)])#三十
    20         date_els.append(['mtdy_ele',today_ele.replace(day=1)])#本月
    21         date_els.append(['last90day_ele',today_ele-timedelta(days=90)])#90天
    22         date_els.append(['last365day_ele',today_ele-timedelta(days=365)])#365天
    23         date_els.append(['ytd_ele',today_ele.replace(month=1,day=1)])##今年
    24 
    25         for item in date_els:
    26             selected_condtion = admin_obj.filter_condtions.get(filter_column)
    27             if selected_condtion != None: #if None, 没有过滤这个条件
    28                 print("heoe....",filter_column,selected_condtion,type(selected_condtion))
    29                 if selected_condtion == str(item[1]): #就是选择的这个条件
    30                     selected = "selected"
    31                 else:
    32                     selected = ""
    33             else:
    34                 selected = ""
    35             option_ele = """<option value="%s" %s>%s</option> """ % (item[1],selected,item[0])#选中的条件
    36             select_ele +=option_ele
    37         filter_column_name="%s__gte"%filter_column
    38     else:
    39         for choice in field_obj.get_choices():#如果是choices
    40             selected_condtion = admin_obj.filter_condtions.get(filter_column)
    41             if selected_condtion != None: #if None, 没有过滤这个条件
    42                 print("heoe....",filter_column,selected_condtion,type(selected_condtion))
    43                 if selected_condtion == str(choice[0]): #就是选择的这个条件
    44                     selected = "selected"
    45                 else:
    46                     selected = ""
    47             else:
    48                 selected = ""
    49             option_ele = """<option class="form-control" value="%s" %s>%s</option> """ % (choice[0],selected,choice[1])#选中的条件
    50             select_ele +=option_ele
    51         filter_column_name=filter_column
    52     select_ele += "</select>"
    53     select_ele=select_ele.format(filter_column=filter_column_name)#格式化时间的判断条件
    54     return mark_safe(select_ele)
    55 
    56 # ————————16PerfectCRM实现King_admin日期过滤————————
    #过滤条件

     

    如果感觉本章博客对您有帮助,请尽情打赏吧!

    
    
  • 相关阅读:
    CSS position, z-index
    Js闭包函数
    .net 全局配置读取
    redis学习
    .net core websocket
    .net core 部署应用程序注意事项
    signalr网上学习资料
    Cocos Creator 中如果Node在"属性检查器"中active设置为false, 则 onLoad 不会执行
    SVN服务器搭建(一)
    IndentityServer4
  • 原文地址:https://www.cnblogs.com/ujq3/p/8657055.html
Copyright © 2011-2022 走看看