登陆密码设置参考

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. cmd以管理员打开

  2. Nand Flash 控制器中的硬件 ECC 介绍

    ECC 产生方法 ECC 是用于对存储器之间传送数据正确进行校验的一种算法,分硬件 ECC 和软件 ECC 算法两种,在 S3C2410 的 Nand Flash 控制器中实现了由硬件电路(ECC 生 ...

  3. 解决element 分页组件,搜索过后current-page 绑定的数据变了,但是页面当前页码并没有变的问题

    前言上一篇写前台解决分页问题的时候没有这个问题,但是在实际项目后台中有遇到过,所以在这里专门说一下,如果参考前台分页出现这种问题了,也可以使用这种方法!bug:vue和element实现的后台分页,当 ...

  4. 二分图——多重匹配模板hdu1669

    好像多重匹配一般是用网络流来做的.. 这是匈牙利算法的模板:lim是每个组的上界 思路是每个组都可以匹配lim个点,那么当点x遇到的组匹配的点数还没有超过lim时,直接匹配即可 如果已经等于了lim, ...

  5. dijkstra (模板)

    突然意识到以前写的都是假的dij,感谢GhostCai神犇. #include<iostream> #include<cstdio> #include<cstring&g ...

  6. 洛谷 2197 nim游戏

    题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取.每次只能从一堆里 ...

  7. some方法过滤

    // 已经存在该tab时跳过 this.tabs.some(item => item.title === option.title) || this.tabs.push(option)

  8. System.Web.Mvc.ViewResultBase.cs

    ylbtech-System.Web.Mvc.ViewResultBase.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Pub ...

  9. JEECG-Boot 项目介绍——基于代码生成器的快速开发平台(Springboot前后端分离)

    Jeecg-Boot 是一款基于代码生成器的智能开发平台!采用前后端分离架构:SpringBoot,Mybatis,Shiro,JWT,Vue&Ant Design.强大的代码生成器让前端和后 ...

  10. HDU--2126 Buy the souvenirs(二维01背包)

    题目http://acm.hdu.edu.cn/showproblem.php?pid=2126 分析:有两个要求,一是计算最多可以选多少中纪念品:而是计算选最多纪念品的方案有多少种, 即统计最优方案 ...