изменение параметров по выбору пользователя - PullRequest
0 голосов
/ 02 июня 2009

В моем классе у меня около 12 полей . Одно поле статус , другое причина . Когда я перехожу на страницу редактирования в администраторе django, я хочу показать второе поле (поле причины) только в том случае, если статус == 'отклонен'. Проблема очень проста: просто показывать поля в соответствии с пользовательским вводом.

Ответы [ 2 ]

3 голосов
/ 02 июня 2009

К сожалению, не существует простого способа сделать это чисто на стороне сервера. Тем не менее, это должно быть относительно легко сделать с некоторым JavaScript - переключение видимости поля причины в зависимости от состояния. Ниже приведен пример использования jQuery:

$(document).ready(function() {
    // Toggle visibility on page load
    setReasonVisibility();

    // Toggle visibility on status change
    $('form #id_status').bind('change', setReasonVisibility)

    function setReasonVisibility() {
        var form = $('form');
        var status = $(form).find('#id_status').val();
        if (status == 'rejected') 
            $(form).find('#id_reason').show();
        else
            $(form).find('#id_reason').hide();
    }
});

Чтобы форма загружала файл JavaScript, вам нужно сослаться на него в классе Media на форму для вашей модели, как-то так:

class YourModelForm(forms.ModelForm):
     class Meta:
         model = YourModel
     class Media:
         js = ('path/to/jquery.js', 'path/to/your-js-file.js')

Это решение должно без проблем работать в админке Django.

0 голосов
/ 02 июня 2009

Мне не ясно, имеете ли вы в виду изменение списка или отдельную страницу редактирования для элемента. Если последнее, @ Guðmundur H имеет хорошее решение jQuery. Если первое, вы могли бы сделать это, предоставив метод для вашей модели reason_if_rejected , который возвращает причину, если статус «отклонен», и в противном случае возвращает пустую строку. Затем вы можете включить название этого метода в настройку list_display .

...