8

我搜索了很长时间来解决这个问题,但仍然找不到任何解决方案。我的模板中有一个很大的表单,它实际上是由一堆模型表单组成的。该大表单中的一个字段不是表单的一部分,而是从views.py中名为“Institutions”的表填充的单个动态下拉菜单,例如:Institutions.objects.all()

这是来自views.py的部分:

def submission_form(request):

    institutions = Institution.objects.all()

    if request.method == 'POST':
        abstractform = AbstractForm(request.POST)
        authorform = AuthorForm(request.POST)

        # Here I want code: if selected institution is this, then do that

        if abstractform.is_valid() and authorform.is_valid()
            new_abstract = abstractform.save()
            new_author = authorform.save()


     else:  
         return render(request, 'records/submission_form.html', {'abstractform': abstractform, 'authorform': authorform, 'institutions':institutions })

这是我模板中的下拉菜单:

 <select id="ddlInstititions">
    <option value="%">---------</option>
    {% for entry in institutions %} 
     <option value="{{ entry.id }}">{{ entry.name }}</option>
    {% endfor %}
</select>

我的问题是:是否可以将选定的 entry.name 传递给视图,以便我可以在那里使用它?如果没有,你建议做什么?

任何帮助将非常感激!

4

2 回答 2

12

为了在 POST 中发送任何表单元素,您需要有一个name属性。所以应该是<select id="ddlInstititions" name="institutions">

在 POST 中传递给视图的是value每个option元素的属性。目前,您已将其设置为entry.id,因此它将是 POST 中的 ID。您可以使用它来查找机构对象并获取名称,也可以更改表单以便entry.name直接放入 value 属性。

于 2013-11-08T16:23:40.567 回答
5

您可以为此使用 jQuery 的 $.ajax()。

在您的 Javascript 中,您可以将事件处理程序绑定到#ddlInstititionsvia

$("#ddlInstitions").on("change", function(){
  var selectedValue = $(this).text();

  $.ajax({
    url : "insititionsSelectHandler/",
    type : "GET",
    data : {"name" : selectedValue},
    dataType : "json",
    success : function(){

    }
  });
});

这将做的是,当您在下拉菜单上进行选择事件时,它将触发此事件处理程序。您必须在您的 `urls.py' 中定义此 URL,例如

(r'^/institionsSelectHandler/$', views.insititionsSelectHandler),

您可以在视图方法中获取值,例如

def insititionsSelectHandler(request):
   key = request.GET["name"]
   ...
   ...
   ...
   #and return your results as a HttpResponse object that contains a dict
   return HttpResponse(simplejson.dumps({"success" : "true", "message" : ... }, mimetype = "application/json")
于 2013-11-08T16:28:38.867 回答