我有一个简单的窗体,视图和呈现该窗体的html。但是问题在于表单总是返回form.is_valid == False。
因此,我检查了清除的数据,但是注意到self.cleaned_data返回一个空列表。
以下是相关代码:
class GraphForm(forms.Form):
from_month = forms.DateField(widget=forms.Select(choices=MONTHS))
from_year = forms.DateField(widget=forms.Select(choices=YEARS))
to_month = forms.DateField(widget=forms.Select(choices=MONTHS))
to_year = forms.DateField(widget=forms.Select(choices=YEARS))
def clean(self):
return self.cleaned_data <<< will always stay be empty
def showgraph(request):
if request.method == 'POST':
form = GraphForm(request.POST)
if form.is_valid():
>>> will never happen <<<
...
...
...
else:
form = GraphForm()
return render(request, 'graph.html', {"form": form})
<form method="post">
{% csrf_token %}
{{ form.from_month }}
{{ form.from_year }}
<br>
{{ form.to_month }}
{{ form.to_year }}
<br>
<p align="center">
<button type="submit" class="btn btn-primary">send</button>
</p>
</form>
有人可以帮助解决这个特殊的问题吗?
答案 0 :(得分:1)
<form>
标签除了方法外还应具有其他作用,以便提交按钮可以正常工作。
<form action="{% url 'name_of_the_view' %}" method="post">
...
</form>
答案 1 :(得分:1)
如果代码未到达form.is_valid()内部,则表示该表单无效,在if中添加else并打印form.errors()并将相同表单返回模板还添加了表单错误在模板中查看错误。
def showgraph(request):
if request.method == 'POST':
form = GraphForm(request.POST)
if form.is_valid():
>>> will never happen <<<
else:
print(form.errors())
else:
form = GraphForm()
return render(request, 'graph.html', {"form": form})
为每个字段添加错误:
<span class="text-danger">{{field.errors.as_text|cut:'* '}}</span>