首页 > 解决方案 > 表格已填写但仍然无效

问题描述

我正在尝试从表单中获取数据并在表单有效时重定向。但是,我似乎没有获取任何数据。在一次测试中,我用“测试”填写每张表格。我希望这些表单有效并重定向到成功页面,并且无法弄清楚我的逻辑哪里出错了。

错误:

form.errors = <ul class="errorlist"><li>category<ul class="errorlist"><li>This field is required.</li></ul></li><li>comment<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

表格.py

from django import forms


class CandidateReportForm(forms.Form):
    category = forms.CharField(label='Category', max_length=10)
    comment = forms.CharField(label='Comment', max_length=1000)

视图.py

from django.shortcuts import render
from django.views import View

from .forms import CandidateReportForm


class CandidateReportView(View):
    form_class = CandidateReportForm
    form_template = 'Reports/candidate_report.html'
    form_submit_template = 'Reports/report_submitted.html'
    form_submit_error = 'Reports/report_error.html'

    def get(self, request, *args, **kwargs):
        form = self.form_class()
        return render(request, self.form_template, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            return render(request, self.form_submit_template)
        else:
            print(f"form.errors = {form.errors}")
            return render(request, self.form_submit_error)

html

<div class="container">
    <div class="card">
        <h2 class="card-title">Report</h2>
        {{ form.as_p }}
        <form action="submit_candidate_report" method="post">{% csrf_token %}
            <input class="btn btn-primary" id="report" name="report" type="submit" value="Submit">
        </form>
    </div>
</div>

标签: django

解决方案


您正在将表单呈现在标签之外!form只有标签内的字段form被提交到服务器,所以你的form标签的 html 应该是:

<form action="submit_candidate_report" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input class="btn btn-primary" id="report" name="report" type="submit" value="Submit">
</form>

推荐阅读