在django表单中显示字段时发出问题

时间:2014-08-28 07:50:19

标签: django

我是django的新手。我需要根据特定条件显示一些字段和表单。我将forms.py作为

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 %}

基本上我想只有当选择options- = 1时才能显示ArgsForm有人可以帮助解决出错的问题吗?

1 个答案:

答案 0 :(得分:0)

这里有很多错误。

首先,clean仅在您拨打form.is_valid()时才会被呼叫,而您尚未这样做。您需要在视图的post方法中执行此操作。

其次,当你这样做时什么都不会发生,因为你没有将POST数据传递给表单。您需要使用postform = CharOptionForm(request.POST)方法中对其进行实例化。

第三,当你这样做时,你会得到一个TypeError,因为你已声明clean采用第二个参数request,表单不希望传递给该方法。您无法在那里访问请求:您应该使用ValidationErrors,而不是尝试在表单中设置消息,然后使用ValidationErrors在表单的errors属性中显示。

第四,你不能实例化另一个表单并在表单的clean方法中返回一个响应:你需要在视图中这样做。