登陆密码设置参考

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. html--设置复选按钮和单选按钮

  2. zookeeper结构和命令

    1.1. zookeeper特性 1.Zookeeper:一个leader,多个follower组成的集群 2.全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个serv ...

  3. NOIP 2017 提高组 day1t2 时间复杂度

    P3952 时间复杂度 标签 NOIp提高组 2017 时空限制 1000ms / 128MB 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂 ...

  4. ERROR in xxx.js from UglifyJs

    在打包项目的时候,出现如下的错误: 经过搜索找到原因: 这是因为webpack在打包vue文件时没有成功转换ES6的语法. 解决方案 解决方法很简单,加入babel-preset-es2015插件即可 ...

  5. 服务器重启,自动重启httpd

    1. 手动重启 cd http ll cd /etc/httpd/   ll service httpd restart 2. 查看服务器内存使用情况 df -h 3. 自动重启 cat /etc/i ...

  6. iOS之CGPath相关属性(一)

    #ifndef CGPATH_H_ #define CGPATH_H_ForeverGuard博客园 #include <CoreFoundation/CFBase.h> #include ...

  7. Hibernate 查询语言

    查询语言 Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性. HQL 查询被 Hibernate 翻译为传统的 SQL ...

  8. python collections 模块 之 deque

    class collections.deque(iterable[,maxlen]): 返回 由可迭代对象初始化的 从左向右的 deque 对象. maxlen: deque 的最大长度,一旦长度超出 ...

  9. ASP.NET MVC生命周期与管道模型

      先来熟悉下asp.net请求管道 1.当客户端发送http://localhost:80/home/index请求时 2.首先到达服务端的内核模块HTTP.SYS(它监听80端口),通过访问注册表 ...

  10. JAVA缓存的实现

    缓存可分为二大类: 一.通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式: 二.内存缓存,也就是实现一个类中静态Map,对这个Map进行 ...