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 ...
随机推荐
- 我最恨ubuntu的自动升级内核功能
总是提示我boot分区空间不足, 怎么办, 删除原有不用的内核呗,手动来做. 1.查看当前使用内核版本号.输入 uname -a 查看.uname -a 2.删除旧内核. 切换root: su 输入命 ...
- 2018-8-10-win10-uwp-打开文件管理器选择文件
title author date CreateTime categories win10 uwp 打开文件管理器选择文件 lindexi 2018-08-10 19:16:50 +0800 2018 ...
- 判断语句(if...else)if...else语句是在指定的条件成立时执行代码,在条件不成立时执行else后的代码
判断语句(if...else) if...else语句是在指定的条件成立时执行代码,在条件不成立时执行else后的代码. 语法: if(条件) { 条件成立时执行的代码 } else { 条件不成立时 ...
- 阿里巴巴大数据产品最新特性介绍--机器学习PAI
以下内容根据演讲视频以及PPT整理而成. 本次分享主要围绕以下五个方面: PAI产品简介 自定义算法上传 数加智能生态市场 AutoML2.0自动调参 AutoLearning自动学习 一.PAI产品 ...
- QQ邮箱发送信息
#以下库为python自带的库,不需要进行安装 #邮件发信动作 import smtplib #构造邮件内容 from email.mime.text import MIMEText #构造邮件头 f ...
- js实现获取两个日期之间所有日期的方法
function getDate(datestr){ var temp = datestr.split("-"); var date = new Date(temp[0],temp ...
- 使用WCF上传文件
在WCF没出现之前,我一直使用用WebService来上传文件,我不知道别人为什么要这么做,因为我们的文件服务器和网站后台和网站前台都不在同一个机器,操作人员觉得用FTP传文件太麻 ...
- java基础之Integer包装类
Integer类概述: Integer 类在对象中包装了一个基本类型 int 的值 该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他 ...
- 从0开始学习ssh之basedao
用于所有dao里边会有许多相同的方法,例如save,update等等.应此设计一个basedao,所有dao都继承它.这样可以省去许多工作量. basedao如下 package cn.itcast. ...
- maven 项目在 tomcat 中启动报错:Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
问题原因: 在下载 maven 依赖包的时候出现某种原因导致下载的依赖包出现损坏,jvm 和 maven 不能正常识别,从而导致出现该问题. 解决办法: 在 maven 仓库中搜索: in-progr ...