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

 

  1 #base_admin.py
  2 
  3 
  4 # ————————24PerfectCRM实现King_admin自定义操作数据————————
  5 from django.shortcuts import render,redirect
  6 # ————————24PerfectCRM实现King_admin自定义操作数据————————
  7 
  8 # ————————04PerfectCRM实现King_admin注册功能————————
  9 
 10 #Django admin 注册功能的形式
 11 # sites = {
 12 #     'crm':{
 13 #         'customers':CustomerAdmin,
 14 #         'customerfollowup':CustomerFollowUPAdmin,
 15 #     }
 16 # }
 17 
 18 class AdminRegisterException(Exception):  #自定义异常
 19     def __init__(self,msg):
 20         self.message = msg
 21 
 22 class BaseAdmin(object):#自定义方法
 23     list_display = ()  #显示的字段(不能包含ManyToManyField)
 24 
 25     # ————————11PerfectCRM实现King_admin分页显示条数————————
 26     list_per_page = 10  # 默认分页条数10
 27     # ————————11PerfectCRM实现King_admin分页显示条数————————
 28 
 29     # ————————15PerfectCRM实现King_admin多条件过滤————————
 30     list_filter = ()        # 过滤器(可以包含ManyToManyField) (注意加 逗号 , )
 31     # ————————15PerfectCRM实现King_admin多条件过滤————————
 32 
 33     # ————————18PerfectCRM实现King_admin搜索关键字————————
 34     search_fields = () #搜索(不能包含CharField)(注意加 逗号 , )
 35     # ————————18PerfectCRM实现King_admin搜索关键字————————
 36 
 37     # ————————26PerfectCRM实现King_admin自定义排序————————
 38     ordering = None    #自定义排序
 39     # ————————26PerfectCRM实现King_admin自定义排序————————
 40 
 41     # ————————27PerfectCRM实现King_admin编辑复选框————————
 42     filter_horizontal = []#复选框
 43     # ————————27PerfectCRM实现King_admin编辑复选框————————
 44 
 45     # ————————33PerfectCRM实现King_admin编辑整张表限制————————
 46     readonly_table=False#默认表单不锁定
 47     # ————————33PerfectCRM实现King_admin编辑整张表限制————————
 48 
 49     # ————————36PerfectCRM实现King_admin密码修改————————
 50     modelform_exclude_fields=[]#排除验证字段
 51     # ————————36PerfectCRM实现King_admin密码修改————————
 52 
 53     # ————————55PerfectCRM实现CRM客户报名状态颜色变化————————
 54     colored_fields = {}
 55     # ————————55PerfectCRM实现CRM客户报名状态颜色变化————————
 56 
 57     # ————————59PerfectCRM实现king_admin行内编辑————————
 58     list_editable = []#可编辑
 59     # ————————59PerfectCRM实现king_admin行内编辑————————
 60 
 61     # ————————24PerfectCRM实现King_admin自定义操作数据————————
 62     actions = []#自定功能
 63 
 64     default_actions = ["delete_selected",]  #默认删除的函数
 65     #默认删除的函数
 66     def delete_selected(self,request,queryset):
 67         # from django.shortcuts import render, redirect
 68         print("goint to delete ",queryset)
 69         app_name=self.model._meta.app_label#app名
 70         model_name=self.model._meta.model_name#表名
 71         objs=queryset#类对象
 72         action=request._admin_action
 73         print(action,'<-------action')
 74         
 75         # ————————33PerfectCRM实现King_admin编辑整张表限制————————
 76         if self.readonly_table:
 77             errors={'锁定的表单':'当前表单已经锁定,不可进行批量删除操作!'}
 78         else:
 79             errors={}
 80         # ————————33PerfectCRM实现King_admin编辑整张表限制————————
 81 
 82         if request.POST.get('delete_confirm')=='yes': #{#table_delete.html#}
 83 
 84             # ————————33PerfectCRM实现King_admin编辑整张表限制————————
 85             if not self.readonly_table:
 86             # ————————33PerfectCRM实现King_admin编辑整张表限制————————
 87                 queryset.delete()
 88                 return redirect('/king_admin/%s/%s/'%(app_name,model_name))
 89             else:
 90                 return redirect('/king_admin/%s/%s/' % (app_name, model_name))
 91         selected_ids=','.join([str(i.id) for i in queryset])
 92         print(selected_ids,'<---selected_ids')
 93         objs=queryset
 94         return render(request,"king_admin/table_delete.html", locals())  #返回删除页
 95     delete_selected.short_description = "默认批量删除"
 96     # ————————24PerfectCRM实现King_admin自定义操作数据————————
 97 
 98     # ————————28PerfectCRM实现King_admin编辑限制————————
 99     readonly_fields = [] # 不可修改
100 
101     # ————————29PerfectCRM实现King_admin编辑自定义限制————————
102     #默认表单验证 全部 可重写
103     def default_form_validation(self,request):
104         #用户可以在此进行自定义的表单验证,相当于django form 的clean方法
105         '''默认表单验证  ==  django form 的clean方法'''
106         pass
107     # ————————29PerfectCRM实现King_admin编辑自定义限制————————
108     # ————————28PerfectCRM实现King_admin编辑限制————————
109 
110     
111 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
112 class AdminSite(object):
113     def __init__(self):
114         self.registered_sites = {}   #传到views 里调用
115     def register(self,model,admin_class=None): #默认值None 使用 BaseAdmin
116         app_name = model._meta.app_label#用内置方法获取 APP名字 (crm)
117         model_name = model._meta.model_name#用内置方法获取 表名  (Customer)
118         if app_name not in self.registered_sites:
119             self.registered_sites[app_name] = {} #创建  crm={}
120         if model_name in self.registered_sites[app_name]:
121             raise AdminRegisterException("app [%s] model [%s] has already registered!异常"
122                                                  %(app_name,model_name))#自定义异常,
123         if not  admin_class:
124             admin_class = BaseAdmin  #默认值None 使用 BaseAdmin
125         # self.registered_sites[app_name][model_name] = admin_class #注册APP
126 # site = AdminSite()  # 实例化类  单例模式
127 
128 
129         # ————————05PerfectCRM实现King_admin注册功能获取内存————————
130         #registered_sites {'crm': {'customer': <class 'crm.kingadmin.CustomerAdmin'>, 'courserecord': <class 'kingadmin.base_admin.BaseAdmin'>}}
131         #把类名放到class的对象里,然后通过class的对象传到前端
132 #         admin_class.model = model
133 #         self.registered_sites[app_name][model_name] = admin_class #注册APP
134 #
135 # site = AdminSite() #实例化类  单例模式
136         # ————————05PerfectCRM实现King_admin注册功能获取内存————————
137 
138         # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
139         #没有实例化会使用同一个内存地址
140         admin_obj = admin_class()  #先实例化
141         admin_obj.model = model    #参数赋值给实例
142         self.registered_sites[app_name][model_name] = admin_obj#注册APP
143         #实例化后,调用会使用不同的内存地址
144 
145 site = AdminSite() #实例化类  单例模式
146         # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
147         
148 # registered_sites={}
149 # def register(model,admin_class=None): #默认值None 使用 BaseAdmin
150 #     app_name = model._meta.app_label#用内置方法获取 APP名字 (crm)
151 #     model_name = model._meta.model_name#用内置方法获取 表名  (Customer)
152 #     if app_name not in registered_sites:
153 #         registered_sites[app_name] = {} #创建  crm={}
154 #     if model_name in registered_sites[app_name]:
155 #         raise AdminRegisterException("app [%s] model [%s] has already registered!异常"
156 #                                              %(app_name,model_name))#自定义异常
157 #     if not admin_class:
158 #         admin_class = BaseAdmin  #默认值None 使用class BaseAdmin
159 #     registered_sites[app_name][model_name] = admin_class #注册APP
160 
161 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
162 
163 # ————————04PerfectCRM实现King_admin注册功能————————
#base_admin.py

相关文章: