Django ModelChoiceField具有即时筛选选项

时间:2011-03-18 14:12:11

标签: javascript django custom-fields

我正在制作一个包含3个班级的应用程序:员工,公司和部门。

当我编辑一名员工时,我需要了解他的公司,然后在所选公司的所有部门中找到一个字段。但是当我使用ModelChoiceField时,我会看到所有公司的所有部门。

这不是特权问题。对于部门字段的验证,它需要是所选公司的部门。但是,我不想对此进行验证,我只需要显示上述字段中选定的特定公司的部门。

因为它是客户端操作,我认为需要javascript,所以我想知道它是否在django中以某种方式自动化,或者我需要为此目的下载django-plugin或jquery-plugin。

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:4)

这不是django内置的东西,需要一点点黑客攻击,但我之前做过这样的事情。

您需要将jQuery AJAX请求附加到公司选择字段的onChange事件中。当有人选择公司时,您查询数据库并要求提供特定于该公司的部门列表。

编辑:

以下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')