zoukankan      html  css  js  c++  java
  • 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数据修改美化————————#}
    {#table_change.html#}

      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数据修改————————
    #views

     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数据修改————————
    # forms.py

  • 相关阅读:
    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
    11
    实战 迁移学习 VGG19、ResNet50、InceptionV3 实践 猫狗大战 问题
    tx2系统备份与恢复
    如何在Ubuntu 18.04上安装和卸载TeamViewer
    bzoj 3732 Network (kruskal重构树)
    bzoj2152 聪聪可可 (树形dp)
    牛客 216D 消消乐 (二分图最小点覆盖)
    牛客 197E 01串
    Wannafly挑战赛23
  • 原文地址:https://www.cnblogs.com/ujq3/p/8665649.html
Copyright © 2011-2022 走看看