Django ModelChoiceField с мгновенными фильтрами - PullRequest
3 голосов
/ 18 марта 2011

Я создаю одно приложение с 3 классами: сотрудник, компания и отдел.

Когда я редактирую сотрудника, мне нужно знать его компанию, а после этого иметь поле со всеми отделами из выбранныхКомпания.Но когда я использую ModelChoiceField, я вижу все отделы всех компаний.

Это не вопрос привилегий.Для проверки поля отдела необходимо указать отдел выбранной компании.Но я не хочу делать проверку для этого, мне нужно только показать отделы от конкретной компании, выбранной в поле выше.

Поскольку это операция на стороне клиента, я думаю, что потребуется javascript, поэтому я хочу знать, автоматизирован ли он каким-либо образом в django, или мне нужно для этого загрузить django-plugin или jquery-plugin.

Я ценю любую помощь, спасибо!

1 Ответ

4 голосов
/ 18 марта 2011

Это не встроенная вещь для django и потребует немного взлома, но я уже делал подобные вещи раньше.

Вы захотите прикрепить запрос jQuery AJAX к событию onChange для поля выбора компании. Когда кто-то выбирает компанию, вы запрашиваете базу данных и запрашиваете список отделов, относящихся к этой компании.

EDIT:

Будет работать что-то вроде следующего javascript и django:

$('#id_company').change(function(){
  $.POST('{% url some_url_name %}',
    {
      'company_id': $('#id_company').val()
    },
    function(data){
      if(data.valid){
        var d = '<select id="id_department" name="department">';
        $.each(data.records, function(k,v){
          d += '<option value="' + v.id + '">' + v.name +'</option>';
        });
        d += '</select>';
        $('#id_department').html(d);
      }
    }, 'json'
  );
});


def ajax_request(request, company_id):
  if request.is_ajax() and request.method == 'POST':
    data = simplejson.dumps(Department.objects.filter(company__id=company_id)
    return HttpResponse(data, mimetype='application/javascript')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...