1 #views
2
3 # ————————02PerfectCRM创建ADMIN页面————————
4 from django.shortcuts import render
5
6 # ————————04PerfectCRM实现King_admin注册功能————————
7 # from django import conf #配置文件
8 # print("dj conf:",conf) #配置文件
9 # print("dj conf:",conf.settings)#配置文件.设置
10 # ————————04PerfectCRM实现King_admin注册功能————————
11
12 # ————————04PerfectCRM实现King_admin注册功能————————
13 from king_admin import app_config #自动调用 动态加载类和函数
14 # ————————04PerfectCRM实现King_admin注册功能————————
15
16 # ————————04PerfectCRM实现King_admin注册功能————————
17 # from king_admin.base_admin import registered_sites # registered_sites={}
18 from king_admin import base_admin
19 # ————————04PerfectCRM实现King_admin注册功能————————
20
21 # ————————11PerfectCRM实现King_admin基本分页————————
22 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger # 分页功能
23 # ————————11PerfectCRM实现King_admin基本分页————————
24
25 def app_index(request):
26 # ————————04PerfectCRM实现King_admin注册功能————————
27 # for app in conf.settings.INSTALLED_APPS:
28 # print(app)#循环打印 配置文件.设置.安装应用程序#.Perfectcustomersettings里的INSTALLED_APPS列表
29 # ————————04PerfectCRM实现King_admin注册功能————————
30
31 # ————————04PerfectCRM实现King_admin注册功能————————
32 # return render(request, 'king_admin/app_index.html')
33 # print("registered_sites",registered_sites)
34 # return render(request, 'king_admin/app_index.html')
35 # ————————04PerfectCRM实现King_admin注册功能————————
36
37 # ————————04PerfectCRM实现King_admin注册功能————————
38 # print("registered_sites", base_admin.registered_sites)
39 # return render(request, 'king_admin/app_index.html')
40 # ————————04PerfectCRM实现King_admin注册功能————————
41
42 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
43 print("registered_sites",base_admin.site.registered_sites)
44 return render(request, 'king_admin/app_index.html', {"site": base_admin.site})
45 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
46
47 # ————————02PerfectCRM创建ADMIN页面————————
48
49
50 # ————————13PerfectCRM实现King_admin分页页数————————
51 #处理def table_data_list(request,app_name,model_name):里的内容,
52 def filter_querysets(request,queryset):
53 condtions = {}
54 for k,v in request.GET.items():#不需要空的,判断是否为空
55 # ————————18PerfectCRM实现King_admin搜索关键字————————
56 # ————————17PerfectCRM实现King_admin单列排序————————
57 # if k=="page":continue##kingadmin分页功能
58
59 # if k=="page":continue##kingadmin分页功能 #写法一
60 # elif k=="_o":continue##kingadmin排序功能 <a href="?_o={{ column }}">{{ column }}</a>
61
62 # if k in ("page","_o") :continue #kingadmin分页功能 #kingadmin排序功能 #写法二
63
64 # if k == "page"or k == "_o": #保留的分页关键字 和 排序关键字 #写法三
65 # continue #continue是结束单次循环
66 # ————————17PerfectCRM实现King_admin单列排序————————
67 if k in ("page", "_o", "_q"): continue # kingadmin分页,排序,搜索#判断标签是否存在 自定义的名称
68 # ————————18PerfectCRM实现King_admin搜索关键字————————
69
70
71 # ————————15PerfectCRM实现King_admin多条件过滤————————
72 if v:
73 condtions[k] = v
74 # ————————15PerfectCRM实现King_admin多条件过滤————————
75 query_res = queryset.filter(**condtions)
76 return query_res,condtions
77 # ————————13PerfectCRM实现King_admin分页页数————————
78
79 # ————————08PerfectCRM实现King_admin显示注册表的字段表头————————
80 def table_data_list(request,app_name,model_name):
81 #通过2个参数到base_admin里获取class AdminRegisterException(Exception): 的对象
82 admin_obj = base_admin.site.registered_sites[app_name][model_name] #base_admin
83
84 # ————————09PerfectCRM实现King_admin显示注册表的内容————————
85 admin_obj.querysets = admin_obj.model.objects.all()#取数据 传到 前端
86 # ————————09PerfectCRM实现King_admin显示注册表的内容————————
87
88 # ————————11PerfectCRM实现King_admin分页显示条数————————
89 # from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger # 分页功能#放在顶上导入
90 obj_list = admin_obj.model.objects.all()#取数据 传到 前端 #base_admin #获取传过来的所有对象
91
92 # ————————13PerfectCRM实现King_admin分页页数————————
93 queryset, condtions = filter_querysets(request, obj_list) #base_admin # 调用条件过滤
94 # ————————13PerfectCRM实现King_admin分页页数————————
95
96 # ————————18PerfectCRM实现King_admin搜索关键字————————
97 queryset = get_queryset_search_result(request,queryset,admin_obj)##搜索后
98 # ————————18PerfectCRM实现King_admin搜索关键字————————
99
100 # ————————17PerfectCRM实现King_admin单列排序————————
101 sorted_queryset = get_orderby(request, queryset) #过滤后的结果
102 # ————————15PerfectCRM实现King_admin多条件过滤————————
103 # paginator = Paginator(obj_list,admin_obj.list_per_page) #kingadmin里class CustomerAdmin(BaseAdmin):
104 # paginator = Paginator(queryset, admin_obj.list_per_page)
105 # ————————15PerfectCRM实现King_admin多条件过滤————————
106 paginator = Paginator(sorted_queryset, admin_obj.list_per_page)
107 # ————————17PerfectCRM实现King_admin单列排序————————
108
109
110 page = request.GET.get('page')
111 try:
112 objs = paginator.page(page) # 当前的页面的数据
113 except PageNotAnInteger:
114 # 如果页面不是一个整数,交付第一页。
115 objs = paginator.page(1)
116 except EmptyPage:
117 # 如果页面的范围(例如9999),交付最后一页的搜索结果。
118 objs = paginator.page(paginator.num_pages)
119 admin_obj.querysets = objs # base_admin
120
121 # ————————13PerfectCRM实现King_admin分页页数————————
122 admin_obj.filter_condtions = condtions # base_admin
123 # ————————13PerfectCRM实现King_admin分页页数————————
124
125 # ————————11PerfectCRM实现King_admin分页显示条数————————
126
127 return render(request,"king_admin/table_data_list.html",locals())
128 # ————————08PerfectCRM实现King_admin显示注册表的字段表头————————
129
130
131
132 # ————————17PerfectCRM实现King_admin单列排序————————
133 def get_orderby(request,queryset):
134 # order_by_key = request.GET.get("_o") #获取URL里有没有("_o") <a href="?_o={{ column }}">{{ column }}</a>
135 # #页面刚开始没有这个值
136 # if order_by_key != None: #有("_o")这个值 就进行排序
137 # query_res = queryset.order_by(order_by_key)
138 # else: #没有就不排序,直接返回
139 # query_res = queryset
140 # return query_res #排序时会错
141
142 orderby_key = request.GET.get("_o")
143 if orderby_key:
144 return queryset.order_by(orderby_key)
145 return queryset
146
147 #在table_data_list添加
148 # def table_data_list(request,app_name,model_name): #详细列表
149 # sorted_queryset = get_orderby(request, queryset)
150 #在filter_querysets添加
151 #if k == "page"or k == "_o": #保留的分页关键字 和 排序关键字
152 # ————————17PerfectCRM实现King_admin单列排序————————
153
154 # ————————18PerfectCRM实现King_admin搜索关键字————————
155 from django.db.models import Q
156 def get_queryset_search_result(request,queryset,admin_obj):
157 search_key = request.GET.get("_q", "")#取定义名,默认为空
158 q_obj = Q()#多条件搜索 #from django.db.models import Q
159 q_obj.connector = "OR" # or/或 条件
160 for column in admin_obj.search_fields: #搜索目标crm/kingadmin里class CustomerAdmin(BaseAdmin):search_fields = ('name','qq',)
161 q_obj.children.append(("%s__contains" % column, search_key)) #运态添加多个条件
162 res = queryset.filter(q_obj) #对数据库进行条件搜索
163 return res #返回结果
164 #在table_data_list添加
165 #def table_data_list(request,app_name,model_name): #详细列表
166 # queryset = get_queryset_search_result(request,queryset,admin_obj)
167 # ————————18PerfectCRM实现King_admin搜索关键字————————
168
169 # ————————19PerfectCRM实现King_admin数据修改————————
170 from king_admin import forms
171 #修改内容
172 # def table_change(request,app_name,model_name):
173 # obj_form = forms.CustomerModelForm() #创建一个空表单
174 # return render(request,"kingadmin/table_change.html",locals())
175
176 def table_change(request,app_name,model_name,obj_id):
177 admin_obj = base_admin.site.registered_sites[app_name][model_name] #获取表对象
178 #kingadmin/forms.py里def CreateModelForm(request,admin_obj):
179 model_form = forms.CreateModelForm(request,admin_obj=admin_obj) ##modelform 生成表单 加验证
180 # obj_form = model_form() # 表单
181 obj = admin_obj.model.objects.get(id=obj_id)#根据ID获取数据记录
182
183 # ————————20PerfectCRM实现King_admin数据修改美化————————
184 # #面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
185 # obj_form = model_form(instance=obj) # 数据传入表单
186
187 if request.method == "GET":
188 obj_form = model_form(instance=obj)
189 elif request.method == "POST":
190 obj_form = model_form(instance=obj,data=request.POST)
191 if obj_form.is_valid():
192 obj_form.save()
193 # ————————20PerfectCRM实现King_admin数据修改美化————————
194
195 return render(request,"king_admin/table_change.html",locals())
196 # ————————19PerfectCRM实现King_admin数据修改————————