У меня не было времени, чтобы разобраться с этим более подробно, поэтому я почти уверен, что есть лучшее решение, но мне кажется, что оно работает (протестировано с django-grappelli 2.3.5 и django-tinymce 1.5.1a2 .
Я предполагаю, что вы используете составные строки.
Вы должны переопределить шаблон из grappelli, templates/admin/edit_inline/stacked.html
. Внутри цикла for, повторяющегося по inline_admin_formset|formsetsort:sortable_field_name
, сразу после вложенного цикла цикла, повторяющегося по inline_admin_form
, добавьте этот фрагмент:
{% if forloop.last %}
<script type="text/javascript">
if (tinyMCE != undefined) {
django.jQuery('textarea', '.empty-form').each(function() {
tinyMCE.execCommand('mceRemoveControl', false, django.jQuery(this).attr('id'));
});
}
</script>
{% endif %}
он должен отключить элементы управления tinyMCE для текстовой областиэлементы в скрытой «пустой форме», инициализированные встроенным javascript, визуализированным для виджета (ей) tinyMCE.
где-то около строки 133 в исходном шаблоне грапелли вы увидите вызов grp_inline()
.Добавьте / измените аргументы:
$("#{{ inline_admin_formset.formset.prefix }}-group").grp_inline({
prefix: "{{ inline_admin_formset.formset.prefix }}",
onBeforeRemoved: function(f) {
if (tinyMCE != undefined) {
// make sure tinyMCE instances in empty-form are inactive
django.jQuery('textarea', '.empty-form').each(function() {
tinyMCE.execCommand('mceRemoveControl', false, django.jQuery(this).attr('id'));
});
}
},
[...]
onAfterAdded: function(form) {
if (tinyMCE != undefined) {
// re-initialise tinyMCE instances
$('textarea', form).each(function(k,v) {
var tid = $(this).attr('id');
tinyMCE.execCommand('mceRemoveControl', false, tid);
tinyMCE.execCommand('mceAddControl', false, tid);
});
// make sure tinyMCE instances in empty-form are inactive
django.jQuery('textarea', '.empty-form').each(function() {
tinyMCE.execCommand('mceRemoveControl', false, django.jQuery(this).attr('id'));
});
}
[...]
}
[...]
Если вы используете сортируемые файлы, вы также хотели бы отключить элементы управления tinyMCE для текстовых областей перетаскиваемой строки. Найдите инициализацию sortable()
и измените 'start'обратный вызов:
start: function(evt, ui) {
ui.placeholder.height(ui.item.height() + 12);
if (tinyMCE != undefined) {
// make sure tinyMCE instances in empty-form are inactive
$('textarea', ui.item).each(function(k,v) {
var tid = $(this).attr('id');
tinyMCE.execCommand('mceRemoveControl', false, tid);
});
}
},
[...]
Это должно дать общее представление о том, как обойти эту надоедливую проблему ...