1. 程式人生 > 實用技巧 >11-crm專案-kingadmin,刪除功能

11-crm專案-kingadmin,刪除功能

刪除功能

(1)kingadmin/urls.py

#刪除
    url(r'^(\w+)/(\w+)/(\d+)/delete/$', views.table_obj_delete,name='obj_delete'),

(2)table_obj_change_component.html

(3)kingamdin/views.py

def table_obj_delete(request,app_name,model_name,obj_id):
    '''刪除功能'''
    admin_class = site.enable_admins[app_name][model_name]
    obj 
= admin_class.model.objects.get(id=obj_id) return render(request,'kingadmin/table_obj_delete.html',locals())

(4)新建table_obj_delete.html

{#kingadmin/templates/kingadmin/table_obj_delete.html#}

{% extends 'kingadmin/index.html' %}
{% load kingadmin_tags %}

{% block right-content-container %}
    
<h2 class="page-header">{% get_model_name admin_class %}</h2> <h4 class="page-header">刪除{{ form_obj.instance }}</h4> <div> delete {{ obj }} </div> {% endblock %}

(5)kingadmin_tags.py

@register.simple_tag
def display_all_related_objs(obj):
    """
    顯示要被刪除物件的所有關聯物件
    
""" ele = "<ul><b style='color:red'>%s</b>" % obj #獲取所有反向關聯的物件 for reversed_fk_obj in obj._meta.related_objects: #獲取所有反向關聯物件的表名 related_table_name = reversed_fk_obj.name # 通過表名反向查所有關聯的資料 related_lookup_key = "%s_set" % related_table_name related_objs = getattr(obj,related_lookup_key).all() ele += "<li>%s<ul> "% related_table_name #get_internal_type(),獲取欄位的型別,如果是m2m,就不需要深入查詢 if reversed_fk_obj.get_internal_type() == "ManyToManyField": # 不需要深入查詢 for i in related_objs: ele += "<li><a href='/kingadmin/%s/%s/%s/change/'>%s</a> 記錄裡與[%s]相關的的資料將被刪除</li>" \ % (i._meta.app_label,i._meta.model_name,i.id,i,obj) #如果不是m2m,就遞迴查詢所有關聯的資料 else: for i in related_objs: ele += "<li><a href='/kingadmin/%s/%s/%s/change/'>%s</a></li>" %(i._meta.app_label, i._meta.model_name, i.id,i) #遞迴查詢 ele += display_all_related_objs(i) ele += "</ul></li>" ele += "</ul>" return ele

(6)table_obj_change_component.html

(7)table_obj_delete.html

{#kingadmin/templates/kingadmin/table_obj_delete.html#}

{% extends 'kingadmin/index.html' %}
{% load kingadmin_tags %}

{% block right-content-container %}
    <h2 class="page-header">{% get_model_name admin_class %}</h2>
    <h3 class="page-header alert alert-danger">你確定要刪除嗎?{{ form_obj.instance }}</h3>

<div>
delete {{ obj }}

{% display_all_related_objs obj as all_related_obj_eles %}
{{ all_related_obj_eles|safe }}

<form method="post">
    {% csrf_token %}
    <input type="submit" class="btn btn-danger" value="確認刪除">
    <a class="btn btn-info" >返回</a>

</form>
</div>
{% endblock %}