Значок включения / выключения для логического поля в list_editable ModelAdmin

#django #django-admin

#django #django-администратор

Вопрос:

Когда я помещаю свое логическое поле в list_editable, его значок меняется с красивого значка включения / выключения на устаревший флажок. Есть ли способ сохранить поле доступным для редактирования с помощью красивых значков? Я думаю, что я уже делал это, но не могу вспомнить как…

Ответ №1:

Используйте свой собственный JavaScript, чтобы заменить флажок соответствующим изображением, и используйте события щелчка, чтобы изменить изображение и установить флажок соответствующим образом.

CSS

 .hidden {
    position:absolute;
    left:-99999px;
    width:0;
    height:0;
    overflow:hidden;
}
  

JS

 (function($){
    var on_image = '/static/admin/img/admin/icon-yes.gif';
    var off_image = '/static/admin/img/admin/icon-no.gif';

    $(document).ready(function(){
        var $checkbox = $('.checkbox_field input');
        // Can't simply `hide()` as its value will not be posted
        $checkbox.addClass('hidden');
        var $img = $('<img/>');
        if ($checkbox.attr('checked')) {
            $img.attr('href', on_image);
            $img.attr('alt', 'On');
        } else {
            $img.attr('href', off_image);
            $img.attr('alt', 'Off');
        }
        $img.insertAfter($checkbox);

        $img.click(function(){
            var $img = $(this);
            var $checkbox = $img.siblings('input');

            if ($img.attr('href') == on_image) {
                $img.attr('href', off_image);
                $img.attr('alt', 'Off');
                $checkbox.attr('checked', false);
            } else {
                $img.attr('href', on_image);
                $img.attr('alt', 'On');
                $checkbox.attr('checked', true);
            }
        });
    });
)(django.jQuery);
  

Комментарии:

1. Спасибо за ответ, который полезен, но я действительно думаю, что для этого был «способ django», я опубликую его, если найду его обратно…