Django项目:CRM(客户关系管理系统)--28--20PerfectCRM实现King_admin数据修改美化
1 {#table_change.html#} 2 {## ————————19PerfectCRM实现King_admin数据修改————————#} 3 {#{% extends "king_master/king_index.html" %}#} 4 {##} 5 {#{% load kingadmin_tags %}#} 6 {#{% block right-container-content %}#} 7 {##} 8 {# {{ obj_form }}#} 9 {##} 10 {#{% endblock %}#} 11 {## ————————19PerfectCRM实现King_admin数据修改————————#} 12 13 {## ————————20PerfectCRM实现King_admin数据修改美化————————#} 14 {% extends 'king_master/king_index.html' %} {#继承模板#} 15 {% load kingadmin_tags %} {#通过自己定义标签获取中文,Django中利用filter与simple_tag为前端自定义函数的实现方法#} 16 {% block right-container-content %} 17 <div class="row" style="margin-bottom: 20px"> 18 <ol class="breadcrumb"> 19 <li><a href="/king_admin/">主页</a></li> 20 <li><a href="/king_admin/{% get_app_name admin_obj.model %}/">{% get_app_name admin_obj.model %}</a></li> 21 <li><a href="/king_admin/{% get_app_name admin_obj.model %}/{% get_model_name admin_obj.model %}/"> 22 {% get_model_verbose_name admin_obj.model %} </a></li> 23 {% if not admin_obj.is_add_form %} {# 新建时 ForeignKey不能实例化 #} 24 <li class="active">{{ obj_form.instance }}</li> {# 修改时 实例化 #} 25 {% endif %} 26 </ol> 27 <h4>修改:{% get_model_verbose_name admin_obj.model %}</h4> 28 </div> 29 30 <div class="row"> 31 {{ obj_form.errors }} 32 <form class="form-horizontal" method="post" onsubmit="return BeforeFormSubmit(this);">{% csrf_token %} 33 {% for field in obj_form %} 34 <div class="form-group"> 35 <label class="col-sm-2 " style="font-weight: normal"> {#字体#} 36 {% if field.field.required %} {#required判断是不是必须填写#} 37 <b>{{ field.label }}</b> 38 {% else %} 39 {{ field.label }} 40 {% endif %} 41 42 </label> 43 <div class="col-sm-10"> 44 <span style="color: red;">{{ field.errors }}</span> 45 {{ field }} 46 </div> 47 </div> 48 {% endfor %} {#放右边#} 49 <input type="submit" value="保存" class="pull-right btn btn-info"> 50 </form> 51 </div> 52 {% endblock %} 53 {## ————————20PerfectCRM实现King_admin数据修改美化————————#}
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)#循环打印 配置文件.设置.安装应用程序#.Perfectcustomer\settings里的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数据修改————————
1 # forms.py 2 # ————————19PerfectCRM实现King_admin数据修改———————— 3 from django import forms 4 from crm import models 5 6 # class CustomerModelForm(forms.ModelForm): 7 # class Meta: #调用内置方法 8 # model = models.Customer #获取表名 9 # fields = "__all__" #字段 10 11 def CreateModelForm(request,admin_obj): 12 class Meta: #调用内置方法 13 model = admin_obj.model #获取表名 14 fields = "__all__" #字段 15 16 # ————————20PerfectCRM实现King_admin数据修改美化———————— 17 # type()就是一个最实用又简单的查看数据类型的方法。type()是一个内建的函数,调用它就能够得到一个反回值,从而知道想要查询的对像类型信息。 18 # dynamic_model_form = type("DynamicModelForm", (forms.ModelForm,), {"Meta": Meta}) #生成modelform的类, 19 20 # new()方法是在类准备将自身实例化时调用。new()方法始终都是类的静态方法,即使没有被加上静态方法装饰器。 21 def __new__(cls, *args, **kwargs): 22 # print("base fields",cls.base_fields) 23 # 字段名 #字段数据 24 for field_name, field_obj in cls.base_fields.items(): 25 # print(field_name,dir(field_obj)) 26 field_obj.widget.attrs['class'] = 'form-control' # 前端的样式 27 # field_obj.widget.attrs['maxlength'] = getattr(field_obj,'max_length' ) if hasattr(field_obj,'max_length') \ 28 # else "" 29 return forms.ModelForm.__new__(cls) 30 dynamic_model_form = type("DynamicModelForm", (forms.ModelForm,), {"Meta": Meta}) # 生成modelform的类, 31 setattr(dynamic_model_form, "__new__", __new__) 32 # ————————20PerfectCRM实现King_admin数据修改美化———————— 33 34 return dynamic_model_form 35 # ————————19PerfectCRM实现King_admin数据修改————————
您的资助是我最大的动力!
金额随意,欢迎来赏!
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【颜言】!