我搜索了这么久的解决方案,但仍然找不到任何解决方案。我的模板中有一个很大的表单,实际上是由一堆模型表单组成的。该大表单中的一个字段不是表单的一部分,而是一个单独的动态下拉菜单,填充在views.py中名为“INSTIT”的表中,如下所示: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传递给视图,以便我可以在那里使用它?如果没有,你建议做什么呢?
任何帮助将不胜感激!
答案 0 :(得分:9)
为了在POST中发送任何表单元素,您需要具有name
属性。所以它应该是<select id="ddlInstititions" name="institutions">
。
POST中传递给视图的内容是每个value
元素的option
属性。目前,您已将其设置为entry.id
,因此它将是POST中的ID。您可以使用它来查找Institution对象并获取名称,也可以更改表单,以便将entry.name
直接放在value属性中。
答案 1 :(得分:5)
你可以使用jQuery的$ .ajax()。
在您的Javascript中,您可以通过
将事件处理程序绑定到#ddlInstititions
$("#ddlInstitions").on("change", function(){
var selectedValue = $(this).text();
$.ajax({
url : "insititionsSelectHandler/",
type : "GET",
data : {"name" : selectedValue},
dataType : "json",
success : function(){
}
});
});
这将做什么是当您在下拉列表中创建一个select事件时,它将触发此事件处理程序。你必须在你的`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")