我是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有人可以帮助解决出错的问题吗?
答案 0 :(得分:0)
这里有很多错误。
首先,clean
仅在您拨打form.is_valid()
时才会被呼叫,而您尚未这样做。您需要在视图的post
方法中执行此操作。
其次,当你这样做时什么都不会发生,因为你没有将POST数据传递给表单。您需要使用post
在form = CharOptionForm(request.POST)
方法中对其进行实例化。
第三,当你这样做时,你会得到一个TypeError,因为你已声明clean
采用第二个参数request
,表单不希望传递给该方法。您无法在那里访问请求:您应该使用ValidationErrors,而不是尝试在表单中设置消息,然后使用ValidationErrors在表单的errors
属性中显示。
第四,你不能实例化另一个表单并在表单的clean
方法中返回一个响应:你需要在视图中这样做。