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',)
# kingadmin_tags.py # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— # # 因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。
# from django import template #模板
# register = template.Library() #模板库
#
# @register.simple_tag #Django中利用filter与simple_tag为前端自定义函数的实现方法
# def get_app_name(model_obj):
#
# # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
# # return model_obj._meta.verbose_name_plural
# '''
# #判断 数据库 里如果有 verbose_name 或者 verbose_name_plural 就 调用 如果都没有 就使用默认的(英文)
# class Meta:
# verbose_name = "04客户信息表" #在 Django Admin 里 表名显示中文 但是会加s
# verbose_name_plural = "04客户信息表" #在 Django Admin 里 表名显示中文 不会加s
# '''
# model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural
# if not model_name:
# model_name = model_obj._meta.model_name
#
# return model_name
# ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— # ————————07PerfectCRM实现King_admin显示注册的表————————
# 因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。
from django import template # 模板 register = template.Library() # 模板库 @register.simple_tag # Django中利用filter与simple_tag为前端自定义函数的实现方法
def get_model_verbose_name(model_obj):
'''
#判断 数据库 里如果有 verbose_name 或者 verbose_name_plural 就 调用 如果都没有 就使用默认的(英文)
class Meta:
verbose_name = "04客户信息表" #在 Django Admin 里 表名显示中文 但是会加s
verbose_name_plural = "04客户信息表" #在 Django Admin 里 表名显示中文 不会加s
'''
model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural
if not model_name:
model_name = model_obj._meta.model_name
return model_name @register.simple_tag
def get_model_name(model_obj):
return model_obj._meta.model_name @register.simple_tag
def get_app_name(model_obj):
return model_obj._meta.app_label # ————————07PerfectCRM实现King_admin显示注册的表———————— # ————————09PerfectCRM实现King_admin显示注册表的内容————————
from django.utils.safestring import mark_safe # 使用mark_safe函数标记后,django将不再对该函数的内容进行转义 @register.simple_tag
def build_table_row(admin_obj, obj): # 通过kingadmin_tags在后台处理 再传到前端
row_ele = "" # 为了生成一整行返回前端
if admin_obj.list_display: # 如果不为空,有在crm/kingadmin.py注册site.register(models.Customer,CustomerAdmin)
# 循环所有 要显示 的字符串 进行反射 展示 字段
for column in admin_obj.list_display: # 循环base_admin里class BaseAdmin下list_display = ()
column_obj = obj._meta.get_field( column ) # 遍历获取 传进的参数对象 if column_obj.choices: # 判断如果字段有choices属性
# 获取choices的字符串(外健)
get_column_data = getattr( obj, "get_%s_display" % column ) # 反射,传进的参数对象,拼接字段
column_data = get_column_data() # 函数,拿到数据
else:
column_data = getattr( obj, column ) # 反射,
# ————————10PerfectCRM实现King_admin日期优化————————
if type( column_data ).__name__ == 'datetime':
column_data = column_data.strftime( '%Y-%m-%d %H-%M-%S' )
# ————————10PerfectCRM实现King_admin日期优化———————— td_ele = '''<td>%s</td>''' % column_data # 把反射来的值 拼接字符串 生成<td>
row_ele += td_ele # 把 <td> 拼接到上面到空字符串
else:
row_ele += "<td>%s</td>" % obj # 把<td>拼接到上面到空字符串,crm/models.py里 def __str__(self):的返回值
return mark_safe( row_ele ) # 使用mark_safe函数标记后,django将不再对该函数的内容进行转义 # ————————09PerfectCRM实现King_admin显示注册表的内容———————— # ————————13PerfectCRM实现King_admin分页页数————————
# 分页功能kingadmin/templates/kingadmin/table_data_list.html里 <a href="?page={{ page }}{% generate_filter_url admin_obj %}">{{ page }}
@register.simple_tag
def generate_filter_url(admin_obj): # 拼接URL
url = ''
for k, v in admin_obj.filter_condtions.items():
url += "&%s=%s" % (k, v)
return url # ————————13PerfectCRM实现King_admin分页页数———————— # ————————14PerfectCRM实现King_admin分页的省略显示————————
# 分页的省略显示
@register.simple_tag
def pag_omit(request, admin_obj): # 传入当前页面值
rest = '' # 大字符串 # ————————15PerfectCRM实现King_admin多条件过滤————————
filters = generate_filter_url( admin_obj ) # 分页
# ————————15PerfectCRM实现King_admin多条件过滤———————— add_tags = False # 标志位
for pages in admin_obj.querysets.paginator.page_range:
# 前两页 或 后 两页 或 当前页的前后页
if pages < 3 or pages > admin_obj.querysets.paginator.num_pages - 2 or abs(
admin_obj.querysets.number - pages ) <= 2:
# 样式
add_tags = False
ele_class = '' # 颜色
if pages == admin_obj.querysets.number: # --如果是当前页码,颜色加深 不进链接跳转--
ele_class = "active" # 颜色加深 # ————————15PerfectCRM实现King_admin多条件过滤————————
# rest+='''<li class="%s"><a href="?page=%s">%s</a></li>'''%(ele_class,pages,pages) #--拼接URL--
rest += '''<li class="%s"><a href="?page=%s%s">%s</a></li>''' % (
ele_class, pages, filters, pages) # --拼接URL--
# ————————15PerfectCRM实现King_admin多条件过滤————————
else: if add_tags == False: # 如果不是标志位的页面
rest += '<li><a>...</a></li>'
add_tags = True # 标志位为真 return mark_safe( rest ) # 使用mark_safe函数标记后,django将不再对该函数的内容进行转义 # ————————14PerfectCRM实现King_admin分页的省略显示———————— # # ————————15PerfectCRM实现King_admin多条件过滤————————
# #多条件过滤 table_data_list.html 传递参数
# @register.simple_tag
# def get_filter_field (filter_column,admin_obj):
# print("admin obj",admin_obj.model ,filter_column)
# field_obj = admin_obj.model._meta.get_field(filter_column)#调用内置方法
# select_ele = """<select name="%s"> """ %filter_column #拼接成下拉框返回
# for choice in field_obj.get_choices():#循环获取crm/models里class Customer(models.Model):下source_choices = ((0,'转介绍'),
# selected_condtion = admin_obj.filter_condtions.get(filter_column)
# if selected_condtion != None: #if None, 没有过滤这个条件
# print("heoe....",filter_column,selected_condtion,type(selected_condtion))#类型是 整数
# if selected_condtion == str(choice[0]): #就是选择的这个条件,整数转字符串
# selected = "selected"
# else:
# selected = ""
# else:
# selected = ""
#
# #在前端把几个条件提交到后台,后台拿着条件变成一个字典,然后进行过滤,把数据返回前端,并且把条件作为字典返回后端,因为要在前端显示已经过滤的条件。
# option_ele = """<option value="%s" %s>%s</option> """ % (choice[0],selected,choice[1])
# select_ele +=option_ele
# select_ele += "</select>"
# return mark_safe(select_ele)
# # ————————15PerfectCRM实现King_admin多条件过滤———————— # # ————————16PerfectCRM实现King_admin日期过滤———————— from django.utils.timezone import datetime, timedelta @register.simple_tag
def get_filter_field(filter_column, admin_obj):
select_ele = """<select name='{filter_column}'><option value="">---------</option>""" # 标签 字符串 #拼接成下拉框返回
field_obj = admin_obj.model._meta.get_field( filter_column ) # 调用内置方法
selected = ''
if field_obj.choices:
for choice_item in field_obj.choices:
if admin_obj.filter_condtions.get( filter_column ) == str( choice_item[0] ):
selected = "selected"
select_ele += """<option value="%s" %s>%s</option> """ % (choice_item[0], selected, choice_item[1])
selected = "" if type( field_obj ).__name__ in ['ForeignKey', 'ManyToManyField','OneToOneField']:#外健属性
for choice_item in field_obj.get_choices()[1:]:
if admin_obj.filter_condtions.get( filter_column ) == str( choice_item[0] ): # 就是选择的这个条件,整数转字符串
selected = "selected"
select_ele += """<option value="%s" %s>%s</option> """ % (choice_item[0], selected, choice_item[1])
selected = '' if type( field_obj ).__name__ in ['DateTimeField', 'DateField']: # 如果是时间格式
date_els = [] # 日期条件项
today_ele = datetime.now().date() # 今天日期
date_els.append( ['今天', today_ele] ) # 今天
date_els.append( ['昨天', today_ele - timedelta( days=1 )] ) # 昨天
date_els.append( ['近7天', today_ele - timedelta( days=7 )] ) # 一周
date_els.append( ['近30天', today_ele - timedelta( days=30 )] ) # 三十
date_els.append( ['本月', today_ele.replace( day=1 )] ) # 本月
date_els.append( ['近90天', today_ele - timedelta( days=90 )] ) # 90天
date_els.append( ['近365天', today_ele - timedelta( days=365 )] ) # 365天
date_els.append( ['本年', today_ele.replace( month=1, day=1 )] ) ##今年 for choice_item in date_els:
if admin_obj.filter_condtions.get( "%s__gte" % filter_column ) == str( choice_item[1] ):
selected = 'selected'
select_ele += """<option value="%s" %s>%s</option> """ % (choice_item[1], selected, choice_item[0])
selected = ''
filter_column_name = "%s__gte" % filter_column
else:
filter_column_name = filter_column select_ele += "</select>"
select_ele = select_ele.format( filter_column=filter_column_name ) # 格式化时间的判断条件
return mark_safe( select_ele )
# ————————16PerfectCRM实现King_admin日期过滤————————
# kingadmin_tags.py
过滤条件 不同写法
# # ————————16PerfectCRM实现King_admin日期过滤————————
from django.utils.timezone import datetime, timedelta #过滤条件
@register.simple_tag
def get_filter_field (filter_column,admin_obj):#过滤条件
print("admin obj",admin_obj.model ,filter_column)
field_obj = admin_obj.model._meta.get_field(filter_column)
select_ele = """<select class="form-control" name='{filter_column}'>""" #标签 字符串
#if type(field_obj).__name__=='ForeignKey': if type(field_obj).__name__ in ['DateTimeField','DateField']:#如果是时间格式
date_els=[]#日期条件项
today_ele=datetime.now().date()#今天日期
date_els.append(['today_ele',today_ele])#今天
date_els.append(['yesterday_ele',today_ele-timedelta(days=1)])#昨天
date_els.append(['last7day_ele',today_ele-timedelta(days=7)])#一周
date_els.append(['last30day_ele',today_ele-timedelta(days=30)])#三十
date_els.append(['mtdy_ele',today_ele.replace(day=1)])#本月
date_els.append(['last90day_ele',today_ele-timedelta(days=90)])#90天
date_els.append(['last365day_ele',today_ele-timedelta(days=365)])#365天
date_els.append(['ytd_ele',today_ele.replace(month=1,day=1)])##今年 for item in date_els:
selected_condtion = admin_obj.filter_condtions.get(filter_column)
if selected_condtion != None: #if None, 没有过滤这个条件
print("heoe....",filter_column,selected_condtion,type(selected_condtion))
if selected_condtion == str(item[1]): #就是选择的这个条件
selected = "selected"
else:
selected = ""
else:
selected = ""
option_ele = """<option value="%s" %s>%s</option> """ % (item[1],selected,item[0])#选中的条件
select_ele +=option_ele
filter_column_name="%s__gte"%filter_column
else:
for choice in field_obj.get_choices():#如果是choices
selected_condtion = admin_obj.filter_condtions.get(filter_column)
if selected_condtion != None: #if None, 没有过滤这个条件
print("heoe....",filter_column,selected_condtion,type(selected_condtion))
if selected_condtion == str(choice[0]): #就是选择的这个条件
selected = "selected"
else:
selected = ""
else:
selected = ""
option_ele = """<option class="form-control" value="%s" %s>%s</option> """ % (choice[0],selected,choice[1])#选中的条件
select_ele +=option_ele
filter_column_name=filter_column
select_ele += "</select>"
select_ele=select_ele.format(filter_column=filter_column_name)#格式化时间的判断条件
return mark_safe(select_ele) # ————————16PerfectCRM实现King_admin日期过滤————————
#过滤条件
如果感觉本章博客对您有帮助,请尽情打赏吧!
Django项目:CRM(客户关系管理系统)--24--16PerfectCRM实现King_admin日期过滤的更多相关文章
- Django项目:CRM(客户关系管理系统)--84--74PerfectCRM实现CRM权限和权限组限制访问URL
#models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...
- Django项目:CRM(客户关系管理系统)--85--75PerfectCRM实现CRM扩展权限
# sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...
- Django项目:CRM(客户关系管理系统)--82--72PerfectCRM实现CRM动态菜单和角色
#models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...
- Django项目:CRM(客户关系管理系统)--58--48PerfectCRM实现CRM客户报名流程学生合同
# sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...
- Django项目:CRM(客户关系管理系统)--32--24PerfectCRM实现King_admin自定义操作数据
#admin.py # ————————01PerfectCRM基本配置ADMIN———————— from django.contrib import admin # Register your m ...
- Django项目:CRM(客户关系管理系统)--31--23PerfectCRM实现King_admin数据删除
登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html # king_urls.py # ————————02PerfectCRM创建ADMIN页面—— ...
- Django项目:CRM(客户关系管理系统)--69--59PerfectCRM实现king_admin行内编辑
#base_admin.py # ————————24PerfectCRM实现King_admin自定义操作数据———————— from django.shortcuts import render ...
- Django项目:CRM(客户关系管理系统)--67--57PerfectCRM实现admin批量生成上课记录
#admin.py # ————————01PerfectCRM基本配置ADMIN———————— from django.contrib import admin # Register your m ...
- Django项目:CRM(客户关系管理系统)--65--55PerfectCRM实现CRM客户报名状态颜色变化
# kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...
- Django项目:CRM(客户关系管理系统)--64--54PerfectCRM实现CRM客户报名链接
# kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...
随机推荐
- 解决jquery ajax在跨域访问post请求的时候,ie9以下无效(包括ie9)的问题
最近在做项目的时候遇到一个问题,就是跨域请求ajax的时候ie9以下的浏览器不可以访问,直接执行error里面的代码,但是也不报错,就上网查了查,发现了一个很好用的方法,在这里记录一下,也希望可以帮到 ...
- 移植 TinyLogin
下载 从 http://tinylogin.busybox.net/downloads/tinylogin1.4.tar.bz2下载 tinylogin1.4 到/tmp 目录当中,并解压. 修改 ...
- 使用github作为远程仓库的常见git操作
[git上传本地代码到github新建仓库]一.建立git本地仓库 1.在本地目标文件夹(Code)中执行命令: git init //初始化本地仓库二.将上传到github的项目文件添加到本地仓库中 ...
- Jmeter 录制脚本【转】
Jmeter 录制脚本[转] Jmeter中有2种方法可以录制脚本. 不过我个人非常不推荐录制脚本,录制的脚本混乱,需要再次加工才能使用. 像我这么精通HTTP协议的人. 一直都是使用Fiddler ...
- 【JZOJ3319】雪地踪迹
description 森林里有一片长方形的草地,在清晨的大雪过后被一层厚厚的积雪所掩盖(下图左). 住在森林里的兔子和狐狸,穿越草地,都会在雪地上留下他们的踪迹.他们总是从左上角进入,并从右下角离开 ...
- 廖雪峰Java13网络编程-3其他-2RMI远程调用
1.RMI远程调用: Remote Method Invocation 目的:把一个接口方法暴露给远程 示例: 定义一个接口Clock,它有一个方法能够获取当前的时间,并编写一个实现类,来实现这个接口 ...
- C语言利用动态数组实现顺序表(不限数据类型)
实现任意数据类型的顺序表的初始化,插入,删除(按值删除:按位置删除),销毁功能.. 顺序表结构体 实现顺序表结构体的三个要素:(1)数组首地址:(2)数组的大小:(3)当前数组元素的个数. //顺序表 ...
- Joomla - T3模板(非常好用的4屏响应式模板)
一.下载 T3 模板 下载地址(需要注册登录才能下载):https://www.joomlart.com/member/downloads/joomlart/t3-framework/t3-blank ...
- 出错提示:“Could not flush the DNS Resolver Cache: 执行期间,函数出了问题”的解决方法
在DNS解析中,出错提示:"Could not flush the DNS Resolver Cache: 执行期间,函数出了问题"的解决方法 . 由于公司网站空间更换了服务商. ...
- python collections模块 之 ChainMap
ChainMap提供了一种多个字典整合的方式,它没有去合并这些字典,而是将这些字典放在一个 maps (一个列表)里,内部实现了很多 dict 的方法,大部分 dict 的方法,ChainMap 都能 ...