0

我是 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。

4

1 回答 1

0

问题已解决。刚变,

{% for c in SubFunctionType %}   
       <option value="{{ c.SubFunctionType }}">{{ c }}</option> 
{% endfor %} 

{% for c in SubFunctionType %}   
       <option value="{{ c }}">{{ c }}</option> 
{% endfor %} 

只是删除“.SubFunctionType”有帮助。

于 2013-08-07T11:44:53.057 回答