我的django表单返回空的cleaned_data

时间:2019-01-13 21:15:53

标签: django django-forms

我有一个简单的窗体,视图和呈现该窗体的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>

有人可以帮助解决这个特殊的问题吗?

2 个答案:

答案 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>