2014-08-28 46 views
0

我是新來的Django。我需要根據特定條件顯示一些字段和表單。我有我的forms.py作爲問題而在Django顯示領域形成

class ArgsForm(forms.Form): 
    run_options = forms.MultipleChoiceField(label='Default Options', choices=(('dataQA','DataQA'),('merge','Merge')), required=False, 
    widget=forms.CheckboxSelectMultiple(attrs={'checked' : 'checked'})) 


class CharOptionForm(forms.Form): 
    name = forms.CharField(label='Name', required=False) 
    char_choices=(('1','CC Char',), ('0','IC Char',)) 
    options = forms.ChoiceField(required=True, label='Run Type', widget=forms.RadioSelect, choices=char_choices, initial='1') 


    def clean(self,request): 
      data = self.cleaned_data 
      if data.get('options', 1): 
       raise forms.ValidationError('Match found') 
      else: 
       raise forms.ValidationError('Provide more data') 

My view.py is 
class TechnologyView(View): 
    app = AutoCharEvalApp 

    def get(self, request, *args, **kwargs): 
     form = CharOptionForm() 
     return render(request, 'autochar/charoption.html', {'form': form, 'view': self}) 

    def post(self, request, *args, **kwargs): 
     form = CharOptionForm(request.POST) 
     return HttpResponseRedirect(reverse('autochar:main', args=(form,))) 

在模板中我已經加入

{% if messages %} 
    <ul class="messages"> 
    {% for message in messages %} 
     <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> 
    {% endfor %} 
    </ul> 
{% endif %} 

基本上我想ArgsForm只應顯示在選項 - = 1時一個人可以幫什麼錯誤?

回答

0

有不少在這裏的錯誤。

首先,只有當您撥打form.is_valid()時,纔會調用clean,您還沒有完成此操作。您需要在視圖的post方法中執行此操作。

其次,什麼都不會,當你做一點,因爲你還沒有POST數據傳遞給表單。您需要使用form = CharOptionForm(request.POST)post方法中將其實例化。

第三,當你這樣做的時候,你會得到一個TypeError,因爲你聲明clean需要第二個參數request,表單不希望傳遞給該方法。您不能訪問有要求的:不是努力,你應該使用ValidationErrors,然後在表格的errors屬性模板顯示設置表單內的信息。

第四,你不能實例另一種形式交回表格的clean方法內的響應:你需要做的是,在視圖。

+0

感謝您的答覆丹尼爾。我會嘗試你的建議。如果它不起作用,我可能會再次打擾你。再次感謝 – user3364086 2014-08-28 10:06:38

+0

嗨丹尼爾,我試過你的建議更改仍然無效。我修改了我的帖子。由於我是新的,我不確定我是否正確地做。你可以請審查或改進我的代碼。謝謝 – user3364086 2014-08-28 10:33:28

+0

你仍然沒有在'post'方法中調用'form.is_valid()'。模板應該引用'form.errors'。 – 2014-08-28 11:49:34