Таким же образом можно добавить 'классы': ['коллапс'] к одному из Вашего ModelAdmin fieldsets, я хотел бы иметь возможность иметь Встроенного Образцового Администратора быть разборным.
Этот билет, Коллапс в администраторском интерфейсе для встроенных связанных объектов, обсуждает точно, что я хочу выполнить. Но тем временем, какова лучшая работа вокруг, в то время как мы ожидаем следующего выпуска?
К вашему сведению: я предложил решение, но я думаю, что лучший существует. Я позволю голосованию заботиться о нем.
Вот как я решил эту проблему, но это слишком похоже на взлом (для взлома).
Я использовал jQuery, размещенный в Google API, чтобы изменить DOM, воспользовавшись собственным скриптом 'show/hide' от Django. Если вы посмотрите на html-источник страницы администратора, то последний загруженный скрипт выглядит так:
<script type="text/javascript" src="/media/admin/js/admin/CollapsedFieldsets.js"></script>
Комментарии в этом файле дали мне идею: Использовать ModelAdmin media definitions для загрузки моего собственного скрипта изменения домена.
from django.contrib import admin
from django.contrib.admin.sites import AdminSite
from myapp.models import *
import settings
media = settings.MEDIA_URL
class MyParticularModelAdmin(admin.ModelAdmin):
# .....
class Media:
js = ('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js',
media+'js/addCollapseToAllStackedInlines.js')
# .....
А затем внутри файла javascript, на который есть ссылка:
// addCollapseToAllStackedInlines.js
$(document).ready(function() {
$("div.inline-group").wrapInner("<fieldset class=\"module aligned collapse\"></fieldset>");
});
Конечный результат работает только на StackedInline, а не на TabularInline.
Я придумал это решение, используя jQuery, который работает на TabularInline
var selector = "h2:contains('TITLE_OF_INLINE_BLOCK')";
$(selector).parent().addClass("collapsed");
$(selector).append(" (<a class=\"collapse-toggle\" id=\"customcollapser\" href=\"#\"> Show </a>)");
$("#customcollapser").click(function() {
$(selector).parent().toggleClass("collapsed");
});
Несколько улучшений в ответе gerdemb. Добавляет текст «Показать» и «Скрыть» соответствующим образом и позволяет заранее указать табличные встроенные имена в списке:
$(document).ready(function(){
var tabNames = ['Inline Name 1', 'Inline Name 2', 'Inline Name 3'];
for (var x in tabNames)
{
var selector = "h2:contains(" + tabNames[x] + ")";
$(selector).parent().addClass("collapsed");
$(selector).append(" (<a class=\"collapse-toggle\" id=\"customcollapser\""+ x + " href=\"#\"> Show </a>)");
};
$(".collapse-toggle").click(function(e) {
$(this).parent().parent().toggleClass("collapsed");
var text = $(this).html();
if (text==' Show ') {
$(this).html(' Hide ');
}
else {
$(this).html(' Show ');
};
e.preventDefault();
});
});