<th >{% get_app_name admin_class.model %}{{ admin_class }} </th>

 #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):
return model_obj._meta.verbose_name_plural # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————

#kingadmin_tags.py

 #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注册功能获取内存优化处理————————

#kingadmin_tags.py

        # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
#没有实例化会使用同一个内存地址
admin_obj = admin_class() #先实例化
admin_obj.model = model #参数赋值给实例
self.registered_sites[app_name][model_name] = admin_obj#注册APP
#实例化后,调用会使用不同的内存地址 site = AdminSite() #实例化类 单例模式
# ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
 #base_admin.py
# ————————04PerfectCRM实现King_admin注册功能———————— #Django admin 注册功能的形式
# sites = {
# 'crm':{
# 'customers':CustomerAdmin,
# 'customerfollowup':CustomerFollowUPAdmin,
# }
# } class AdminRegisterException(Exception): #自定义异常
def __init__(self,msg):
self.message = msg class BaseAdmin(object):#自定义方法
list_display = () # ————————05PerfectCRM实现King_admin注册功能获取内存————————
class AdminSite(object):
def __init__(self):
self.registered_sites = {} #传到views 里调用
def register(self,model,admin_class=None): #默认值None 使用 BaseAdmin
app_name = model._meta.app_label#用内置方法获取 APP名字 (crm)
model_name = model._meta.model_name#用内置方法获取 表名 (Customer)
if app_name not in self.registered_sites:
self.registered_sites[app_name] = {} #创建 crm={}
if model_name in self.registered_sites[app_name]:
raise AdminRegisterException("app [%s] model [%s] has already registered!异常"
%(app_name,model_name))#自定义异常,
if not admin_class:
admin_class = BaseAdmin #默认值None 使用 BaseAdmin
# self.registered_sites[app_name][model_name] = admin_class #注册APP
# site = AdminSite() # 实例化类 单例模式 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
#registered_sites {'crm': {'customer': <class 'crm.kingadmin.CustomerAdmin'>, 'courserecord': <class 'kingadmin.base_admin.BaseAdmin'>}}
#把类名放到class的对象里,然后通过class的对象传到前端
# admin_class.model = model
# self.registered_sites[app_name][model_name] = admin_class #注册APP
#
# site = AdminSite() #实例化类 单例模式
# ————————05PerfectCRM实现King_admin注册功能获取内存———————— # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
#没有实例化会使用同一个内存地址
admin_obj = admin_class() #先实例化
admin_obj.model = model #参数赋值给实例
self.registered_sites[app_name][model_name] = admin_obj#注册APP
#实例化后,调用会使用不同的内存地址 site = AdminSite() #实例化类 单例模式
# ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— # registered_sites={}
# def register(model,admin_class=None): #默认值None 使用 BaseAdmin
# app_name = model._meta.app_label#用内置方法获取 APP名字 (crm)
# model_name = model._meta.model_name#用内置方法获取 表名 (Customer)
# if app_name not in registered_sites:
# registered_sites[app_name] = {} #创建 crm={}
# if model_name in registered_sites[app_name]:
# raise AdminRegisterException("app [%s] model [%s] has already registered!异常"
# %(app_name,model_name))#自定义异常
# if not admin_class:
# admin_class = BaseAdmin #默认值None 使用class BaseAdmin
# registered_sites[app_name][model_name] = admin_class #注册APP # ————————05PerfectCRM实现King_admin注册功能获取内存———————— # ————————04PerfectCRM实现King_admin注册功能————————

#base_admin.py



如果感觉本章博客对您有帮助,请尽情打赏吧!

Django项目:CRM(客户关系管理系统)--14--06PerfectCRM实现King_admin注册功能获取内存优化处理的更多相关文章

  1. Django项目:CRM(客户关系管理系统)--53--44PerfectCRM实现账号快速注册登陆

    # gbacc_ajax_urls.py # ————————42PerfectCRM实现AJAX全局账号注册———————— from django.conf.urls import url fro ...

  2. Django项目:CRM(客户关系管理系统)--12--05PerfectCRM实现King_admin注册功能获取内存01

    #base_admin.py #Django admin 注册功能的形式 # sites = { # 'crm':{ # 'customers':CustomerAdmin, # 'customerf ...

  3. Django项目:CRM(客户关系管理系统)--13--05PerfectCRM实现King_admin注册功能获取内存02

    admin_class.model = modelself.registered_sites[app_name][model_name] = admin_class #注册APP #base_admi ...

  4. Django项目:CRM(客户关系管理系统)--49--40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息

    # gbacc_urls.py # ————————38PerfectCRM实现全局账号登录注销———————— from django.conf.urls import url from gbacc ...

  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(客户关系管理系统)--65--55PerfectCRM实现CRM客户报名状态颜色变化

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

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

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

随机推荐

  1. HTML 颜色表示

    三种表示方法 1 颜色单词 : blue green red pink 2 10进制表示: RGB(255, 10, 0) 3 16进制表示: #FF0000(红)  #00FF00(绿)

  2. ubuntu关闭防火墙(默认命令)

  3. 汇编语言LAHF和SAHF指令

    LAHF(加载状态标志位到 AH)指令将 EFLAGS 寄存器的低字节复制到 AH.被复制的标志位包括:符号标志位.零标志位.辅助进位标志位.奇偶标志位和进位标志位.使用这条指令,可以方便地把标志位副 ...

  4. BZOJ3907 网格 卡特兰数

    题目描述 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m. 现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线左 ...

  5. JS对象和数组深浅拷贝总结②

    在实际开发中遇到过太多次深拷贝浅拷贝的问题.总结一下~ JS数据存储和深浅拷贝实际运用① 这是之前写过的一篇文章,解决浅拷贝深拷贝的问题只说了一种方法,今天来补充一下. 介绍深拷贝和浅拷贝都在上一篇文 ...

  6. Location protocol 属性

    Location protocol 属性 定义和用法 protocol 属性是一个可读可写的字符串,可设置或返回当前 URL 的协议. 语法 location.protocol <!DOCTYP ...

  7. 构建工具Bazel入门

    Bazel入门   原文:http://bazel.io/docs/getting-started.html 译者:chai2010 安装 安装过程请参考: http://bazel.io/docs/ ...

  8. python简单爬豆瓣电影排名

    爬豆瓣电影 网站分析: 1 打开https://movie.douban.com,选择  [排行榜],然后随便选择一类型,我这里选择科幻    2 一直浏览网页,发现没有下一的标签,是下滑再加载的,可 ...

  9. day65——day69

    目录 DAY65 课堂笔记 1.vue实例 2.插值表达式 3.文本指令 4.面向对象js 5.js函数补充 6.事件指令 7.属性指令 DAY66 课堂笔记 1.表单指令 2.条件指令 3.循环指令 ...

  10. Matlab 路径函数

    1 fileparts [pathstr,name,ext] = fileparts(filename) 将filename字符串分解成路径,文件名和文件后缀.文件可以不存在,ext中含有前缀dot( ...