CRM客戶關系管理系統(九)


第九章、filter_horizontal優化和kingadmin刪除功能

 9.1.filter_horizontal優化

(1)添加Choose ALL 和Remove ALL

 table_obj_change_component.html

 

 js代碼

function MoveAllElements(from_id,to_id) {

        console.log( $("#"+from_id).children())
         $("#"+from_id).children().each(function () {
             MoveSelectedOption(this,to_id);
         })
    }

 

 (2)添加過濾框功能

 

 js代碼

function FuzzSearch(ele){

        console.log($(ele).val())
        var search_text = $(ele).val().toUpperCase();
        $(ele).next().children().each(function () {
            if ( $(this).text().toUpperCase().search(search_text) != -1){
                $(this).show();
            }else {
                $(this).hide();
            }
        })

    }

 

 9.2.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 %}

 

 刪除的時候會提示所有關聯對象

 

 

修改分頁(設置默認顯示多少條數據)

kingamdin/admin_base.py

class BaseKingAdmin(object):

    list_display = []
    list_filter = []
    search_fields = []
    #只讀
    readonly_fields = []
    filter_horizontal = []
    list_per_page = 5

kingadmin/views.py

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM