zoukankan      html  css  js  c++  java
  • CRM删除数据——24天

    1、在table_objs_change.html文件加上删除按钮:

    <div class="col-sm-2">
                    <button type="button" class="btn btn-danger">
                        <a href="{% url 'table_objs_delete' app_name table_name form_obj.instance.id %}">Delete</a>
                    </button>
     </div>

    2、在urls.py文件中加上url:

        url(r'^(w+)/(w+)/(d+)/delete/$', views.table_objs_delete, name='table_objs_delete'),

    3、新建table_objs_delete.html文件:

    {% extends "kindadmin/table_index.html"%}
    {% load tags %}
    
    {% block container%}
        
        {% display_obj_related obj %}
    {% endblock%}

    4、在view.py文件中返回table_objs_delete.html页面:

    def table_objs_delete(request,app_name,table_name,obj_id):
        """
        #删除数据
        :param request:
        :param app_name: crm
        :param table_name: Costomer
        :param obj_id: Costomer.id
        :return:
        """
        admin_class = kind_admin.enabled_admins[app_name][table_name]
        obj = admin_class.model.objects.get(id=obj_id)
        return render(request,"kindadmin/table_objs_delete.html",{"admin_class":admin_class,
                                                                  "obj":obj})

    5、在tags.py文件中处理返回页面的逻辑,表onetonone,manytomany的关系取值,利用递归去一层层的找(这个有点蒙)

    @register.simple_tag
    def recursive_related_objs_lookup(objs):
        #model_name = objs[0]._meta.model_namme
    
        #m = models.Customer.objects.get(id=20)
        ul_ele = "<ul>"
        for obj in objs:
            li_ele = '''<li>%s:%s</li>'''%(obj._meta.verbose_name,obj.__str__().strip("<>"))
            ul_ele +=li_ele
    
            #many_to_many的对象
            #print("------- obj._meta.local_many_to_many", obj._meta.local_many_to_many)
            for m2m_field in obj._meta.local_many_to_many: #把所有跟这个对象直接关联的m2m字段取出来
                sub_ul_ele = "<ul>"
                m2m_field_obj = getattr(obj,m2m_field.name) #getattr(customer,'tags')
                for o in m2m_field_obj.select_related(): #customer.tags.select_related()
                    li_ele ='''<li>%s:%s</li>''' %(m2m_field.verbose_name,o.__str__().strip("<>"))
                    sub_ul_ele+=li_ele
                sub_ul_ele +="</ul>"
                ul_ele +=sub_ul_ele #最后跟最外层的ul相拼接
            #一对一的
            #red =m._meta.related_objects
            for related_obj in obj._meta.related_objects:
                #red[1].__repr__()
                if 'ManyToManyRel' in related_obj.__repr__():
                    #hasattr(m,red[0].get_accessor_name())
                    if hasattr(obj,related_obj.get_accessor_name()):
                        #getattr(m,red[0].get_accessor_name())
                        accessor_obj = getattr(obj,related_obj.get_accessor_name())
                        #上面的accessor_obj相当于customer.enrollment_set
                        if hasattr(accessor_obj,'select_related'): #select_related()==all()
                            target_objs = accessor_obj.select_related() # .filter(**filter_coditions)
                            # target_objs 相当于 customer.enrollment_set.all()
                            sub_ul_ele = "<ul style='color:red'>"
                            for o in target_objs:
                                li_ele = '''<li> %s:%s </li>''' %(o._.meta.verbose_name,o.__str__().strip("<>"))
                                sub_ul_ele+=li_ele
                            sub_ul_ele+="</ul>"
                            ul_ele+=sub_ul_ele
                elif hasattr(obj,related_obj.get_accessor_name()): ## hassattr(customer,'enrollment_set')
                    accessor_obj = getattr(obj,related_obj.get_accessor_name())
                    # 上面accessor_obj 相当于 customer.enrollment_set
                    if hasattr(accessor_obj,'select_related'): #select_related() == all()
                        target_objs = accessor_obj.select_related() ##.filter(**filter_coditions)
                        # target_objs 相当于 customer.enrollment_set.all()
    
                    else:
                        print("one to one i guess:",accessor_obj)
                        target_objs = accessor_obj
                    if len(target_objs) >0:
                        nodes = recursive_related_objs_lookup(target_objs)
                        ul_ele += nodes
        ul_ele+="</ul>"
        return ul_ele
    
    @register.simple_tag
    def display_obj_related(obj):
        objs = [obj,]
        if objs:
            model_class = objs[0]._meta.model #models.Customer
            model_name = objs[0]._meta.model_name
    
            return mark_safe(recursive_related_objs_lookup(objs))

    在删除页面内容如下:

  • 相关阅读:
    数据结构(树链剖分):NOI2014 购票
    数据结构(树链剖分):COGS 2109. [NOIP2015] 运输计划
    数据结构(树链剖分,堆):HNOI 2016 network
    快速傅里叶变换(FFT):COGS 2216. 你猜是不是KMP
    生成树的计数(基尔霍夫矩阵):BZOJ 1002 [FJOI2007]轮状病毒
    数据结构(线段树):BZOJ 3126: [Usaco2013 Open]Photo
    数位DP:SPOJ KPSUM
    动态规划(状态压缩):BZOJ 2621 [Usaco2012 Mar]Cows in a Skyscraper
    数据结构(并查集):COGS 260. [NOI2002] 银河英雄传说
    生成树的计数(基尔霍夫矩阵):UVAoj 10766 Organising the Organisation SPOJ HIGH
  • 原文地址:https://www.cnblogs.com/venvive/p/11366936.html
Copyright © 2011-2022 走看看