2010-11-19 7 views
0

장고 관리자 용 m2m 위젯이 표시되는 방법을 사용자 정의해야하지만 시작할 수있는 종류가 있습니다. django.formsdjango.contrib.admin.wigets에서 위젯을 하위 클래스로 서브 클래 싱하려고했지만 아무것도 작동하지 않는 것 같습니다.Django admin Many2Many 위젯 사용자 정의

여기 내가 찾고있는 것의 묘사가 http://i.stack.imgur.com/81AY3.png입니다.

도움을 주시면 감사하겠습니다.

답변

0

JavaScript만으로는 얻을 수있는 것처럼 보입니다. Django 관리자에게 자바 스크립트를 추가하려면 ModelAdmin media definitions의 설명서를 참조하십시오.

0

이것은 내가 생각해 낸 것입니다. 대부분의 작업을 수행합니다. 그러나 새 항목을 추가 할 때 목록이 업데이트되지 않고 항목을 변경해도 원래 페이지로 다시 리디렉션되지 않습니다. 당신이 볼 수 있듯이

/your_app/forms.py

class ProductForm(forms.ModelForm): 
    class Media: 
     js = ('js/custom_m2m.js',) 

    class Meta: 
     model = Product 

/your_media/js/custom_m2m.js

django.jQuery(function() { 
    var $ = django.jQuery; 

    // Add a new place holder div to hold the m2m list 
    $('div.options div').append('<div class="newdiv"></div>'); 

    // Assign some variables 
    var target = "options"; // <-- Target Field 
    var newdiv = $('div.newdiv'); 
    var next_page = window.location.pathname; 
    var add_link = $('div.'+target+' div a#add_id_'+target); 
    var edit_img = "/static/media_admin/img/admin/icon_changelink.gif"; 
    var add_img = "/static/media_admin/img/admin/icon_addlink.gif"; 

    // Make the placeholder div bit nicer 
    newdiv.attr("style", "line-height:20px; margin-left:105px;"); 

    // Iterate through select options and append them to 'newdiv' 
    $('select#id_'+target+' option[selected="selected"]').each(function() { 
     newdiv.append('<a href="/admin/shop/option/'+$(this).val()+'/?next='+next_page+'">'+$(this).text()+' <img src="'+edit_img+'" /></a><br />'); 
    }); 

    // Add a 'Add new' link after the option list 
    add_link.html('<strong>Add new</strong> ' + add_link.html()); 
    add_link.appendTo(newdiv); 

    // Show the 'newdiv' and hide the original dropdown 
    $('select#id_'+target).after(newdiv); 
    $('select#id_'+target).css("display", "none"); 
    $('div.'+target+' p[class="help"]').css("display", "none"); 
}); 

은, 위의 스크립트는 일부 하드 코딩 된 경로를 사용합니다. 어떤 개선이 도움이 될 것입니다.

관련 문제