我是django,python和ajax的新手。我有一个包含4个字段的django表单。在4个字段中,一个字段的数据基于先前字段的选择。我用ajax来实现这个。我的ajax响应很好。它正在我的html页面中填充。但是,当我提交表单时,该字段在视图中是空的。 这是我的forms.py
class UserForm(forms.Form):
def __init__(self, *args, **kwargs):
super(UserForm,self).__init__(*args, **kwargs)
self.fields['FunctionType'] = forms.ChoiceField(label='FunctionType',choices=function_choices(), widget=Select(attrs={'onChange':'get_function_type()'}),required=False)
self.fields['SubFunctionType'] = forms.ChoiceField(label='SubFunctionType',choices=subfunction_choices(),widget=Select,required=False)
self.fields['FromDate'] = forms.CharField(label='FromDate',max_length=30,required=False)
self.fields['ToDate'] = forms.CharField(label='ToDate',max_length=30,required=False)
其中function_choices()和subfunction_choices()是从数据库中提取选项的函数。应在选择特定功能类型时更改子功能类型。 这是我的javascript函数,称为“onchange”。
function get_function_type() {
var functionVal = document.getElementById("id_FunctionType").value;
if (functionVal == "---- Select a Function Type ----")
{
alert ("Please select a valid function");
}
else
{
new Ajax.Request('/test/select_subfunction', {
method: 'get',
parameters: $H({'FunctionType': FunctionVal}),
onSuccess : function(transport) {
var e = $('id_SubFunctionType')
if(transport.responseText)
e.update(transport.responseText)
}
}); // end new Ajax.Request
}
}
/ test / select_subfunction对应的视图是,
def select_subfunction(request):
if request.is_ajax() and request.method == 'GET':
func_type = request.GET.get('FunctionType','')
SubFunctionType = { (values fetched from database) }
return render_to_response('Input.html', {'SubFunctionType':SubFunctionType},context_instance=RequestContext(request))
使用单个HTML模板,如下所示
<form id="UserForm" enctype="multipart/form-data" method="post" action=""> {% csrf_token %}
<table align="center">
<tr>
<td > Function Type * {{ form.FunctionType }} </td> </tr>
<td > SubFunction Type * {{ form.SubFunctionType }} </td> </tr>
{% for c in SubFunctionType %}
<option value="{{ c.SubFunctionType }}">{{ c }}</option>
{% endfor %}
<td > From (YYYY-MM-DD) <br> {{ form.FromDate }} </td> </tr>
<td > To (YYYY-MM-DD) <br> {{ form.ToDate }} </td> </tr>
</form>
</table>
<input type="submit" value="Submit" />
根据功能选择填充子功能值,但视图中为空白。 request.POST输出如下,
POST:<QueryDict: {u'FunctionType': [u'Laptop'], u'ToDate': [u''], u'csrfmiddlewaretoken': [u'Z8JjC04imL3Tkn0XYPFL2EZ5znzvssar'], u'SubFunctionType': [u''], u'FromDate': [u'']}>,
对于功能型笔记本电脑,它显示所有品牌的笔记本电脑。我选择了惠普。因此,子功能应包含HP。
答案 0 :(得分:0)
问题已解决。刚刚改变了,
{% for c in SubFunctionType %}
<option value="{{ c.SubFunctionType }}">{{ c }}</option>
{% endfor %}
到
{% for c in SubFunctionType %}
<option value="{{ c }}">{{ c }}</option>
{% endfor %}
只需删除“.SubFunctionType”帮助。