2011-05-16 73 views
0

我有以下形式動態字段:is_valid總是假(Django的)

)在models.py我希望在一個值的形式傳遞給查詢

class InsertValuesForm(forms.Form): 
    def __init__(self, idfield, *args, **kwargs):   

     super(InsertValuesForm, self).__init__(*args, **kwargs) 

     for f in Parameter.objects.filter(id=idfield):   

      if Part.objects.get(parameter=f.parameter_name).isfunction: 
       self.fields.update({ 
          f.parameter_name) : forms.CharField(widget=forms.TextInput())}) 

1)views.py

def something(request) 
#...... 
       idfield = request.GET.get('feid','0') 

       form = InsertValuesForm(request.POST,idfield) 

       if request.method == 'POST': 

        if form.is_valid(): 

         #some code 

       else: 

        form = InsertValuesForm(idfield) 

       return render_to_response('fuzz/configuration.html', { 
       'form': form, 
      },context_instance=RequestContext(request)) 

在第1種情況下,我能夠在for循環中顯示動態字段。然而,在填寫所有字段並提交(POST)之後,表單向我拋出了此錯誤:

int()參數必須是字符串或數字,而不是'QueryDict'。我在想這是導致錯誤的request.POST。 對這個問題做了一些研究之後,有這樣類似的解決方案:

http://groups.google.com/group/django-users/browse_thread/thread/ddefd76324ffe6cd http://groups.google.com/group/django-users/browse_thread/thread/495a917396b20b37/c430d71a31204e5d#c430d71a31204e5d

2)models.py

class InsertValuesForm(forms.Form): 
    def __init__(self, *args, **kwargs): 

     idfield = kwargs.pop('idfield', False) 

     super(InsertValuesForm, self).__init__(*args, **kwargs) 

     for f in Parameter.objects.filter(id=idfield):   

      if Part.objects.get(parameter=f.parameter_name).isfunction: 
       self.fields.update({ 
          f.parameter_name) : forms.CharField(widget=forms.TextInput())}) 

的以下是views.py的片段(與數字1相同)

def something(request) 
#...... 
       idfield = request.GET.get('feid','0') 

       form = InsertValuesForm(request.POST,idfield) 

       if request.method == 'POST': 

        if form.is_valid(): 

         #some code 

       else: 

        form = InsertValuesForm(idfield) 

       return render_to_response('fuzz/configuration.html', { 
       'form': form, 
      },context_instance=RequestContext(request)) 

現在上面的代碼甚至不顯示動態文本框,只是顯示爲空白頁。欣賞是否有人可以點亮

如何顯示這些動態文本框,並同時通過request.POST獲取這些文本框的值,並使表單生效。謝謝

回答

1

您已更改表格的簽名__init__,以便第一個位置參數是idfield。不要這樣做,因爲現在當你用form = InsertValuesForm(request.POST,idfield)實例化它時,它將第一個參數設爲idfield,而不是request.POST

取而代之的是,該方法是這樣的:

def __init__(self, *args, **kwargs): 
     idfield = kwargs.pop('idfield', None) 
     ...etc... 

,並用關鍵字ARG實例吧:

form = InsertValuesForm(request.POST, idfield=idfield) 
+0

感謝丹尼爾指出的錯誤! – ndantonio 2011-05-16 10:59:26