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日期过滤————————
#过滤条件

 

 


 

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

 

 

 


posted @ 2018-03-27 13:49  颜言  阅读(424)  评论(0编辑  收藏  举报