登陆密码设置参考

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日期过滤的更多相关文章

  1. Django项目:CRM(客户关系管理系统)--84--74PerfectCRM实现CRM权限和权限组限制访问URL

    #models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...

  2. Django项目:CRM(客户关系管理系统)--85--75PerfectCRM实现CRM扩展权限

    # sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...

  3. Django项目:CRM(客户关系管理系统)--82--72PerfectCRM实现CRM动态菜单和角色

    #models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...

  4. Django项目:CRM(客户关系管理系统)--58--48PerfectCRM实现CRM客户报名流程学生合同

    # sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...

  5. Django项目:CRM(客户关系管理系统)--32--24PerfectCRM实现King_admin自定义操作数据

    #admin.py # ————————01PerfectCRM基本配置ADMIN———————— from django.contrib import admin # Register your m ...

  6. Django项目:CRM(客户关系管理系统)--31--23PerfectCRM实现King_admin数据删除

    登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html # king_urls.py # ————————02PerfectCRM创建ADMIN页面—— ...

  7. Django项目:CRM(客户关系管理系统)--69--59PerfectCRM实现king_admin行内编辑

    #base_admin.py # ————————24PerfectCRM实现King_admin自定义操作数据———————— from django.shortcuts import render ...

  8. Django项目:CRM(客户关系管理系统)--67--57PerfectCRM实现admin批量生成上课记录

    #admin.py # ————————01PerfectCRM基本配置ADMIN———————— from django.contrib import admin # Register your m ...

  9. Django项目:CRM(客户关系管理系统)--65--55PerfectCRM实现CRM客户报名状态颜色变化

    # kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...

  10. Django项目:CRM(客户关系管理系统)--64--54PerfectCRM实现CRM客户报名链接

    # kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...

随机推荐

  1. unity3d入门 Demo 学习记录

    闲来学习一下 unity3d 的Demo,记录如下. 官方 Demo,名字为 Roll-A-Ball,如图 场景比较简单,包含地面.玩家精灵.主摄像机.墙壁.可拾取的方块.分数为示 text.平行光源 ...

  2. 流程控制&&函数

    1.if 条件语句 if 判断条件: 执行语句…… elif 判断条件: 执行语句…… else: 执行语句…… 2.for 循环 ''' for 后跟变量名,in 后跟序列,注意加冒号 for 循环 ...

  3. 阿里云全站加速DCDN全面支持WebSocket协议

    WebSocket协议可以为网站和应用提供真正的双向通信,具有控制开销.保持连接状态.更强实时性.更好的压缩效果等优点,是当下低延时应用最常采用的一种技术协议.为了更好的满足客户在实时通讯场景下的加速 ...

  4. 07.27NOIP模拟赛

    戳这里下载过去三次NOIP模拟赛总成绩 (别嘲笑垫底的我...解压密码为信奥生所在的两个班的班号,文档密码为机房开机用户名+密码) 又一次垫底…… 我难受. 上来感觉T1不可做,T2和蔼可亲,T3一脸 ...

  5. 【BZOJ4561】[JLoi2016]圆的异或并

    传送门 把圆拆成上下两个圆弧,因为不存在相交关系,圆弧直接的上下关系是不变的. 用set维护这些圆弧,插入的时候upper_bound一下,如果找到的是上圆弧,就是我外面的第一个圆,否则我外面的第一个 ...

  6. Hystrix容错处理

    如果服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直接提供者响应或超时.在高负载场景下,如果不做任何处理,此类问题可能会导致服务消费者的资源耗竭甚至整个系统的崩溃.这时,就需要进行容 ...

  7. EF实体模型的更新

    摘要 解决前期数据库优先添加的实体,然后数据库表结构发生变化后,导致代码操作EF插入更新数据失败问题 EF 数据库更新模型 相比大家在使用实体操作数据库的时候,都是采取数据库优先,手动添加实体模型.但 ...

  8. C++ #define,typedef,using用法区别

    一.#define #define 是宏定义命令,宏定义就是将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替,是预编译命令,因此会在预编译阶段被执行 1.无参宏定义 无参宏的宏名 ...

  9. final关键字与类型转换

    一.关于final的重要知识点; 1.final关键字可以用于成员变量.本地变量.方法以及类. 2. final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误. 3. 你不能够 ...

  10. 在菜单栏对应图标点击右键-关闭窗口,javaw.exe进程未关闭。

    问题: 可视化开发时,运行一个工程,总会生成一个javaw.exe进程. 关闭运行程序,javaw.exe还存在. 解决: 运行java工程时,会启动一个新的虚拟机来运行你的程序. 程序退出的时候,这 ...