【问题标题】:Django Form View not receiving dataDjango 表单视图未接收数据
【发布时间】:2015-02-09 22:55:46
【问题描述】:

我正在使用Django Form View 将一个大的单页表单拆分为一个多页表单,每个表单都有单独的模板。我按照文档和其他在线示例进行了操作,并且大多数事情进展顺利。

但是,问题是我在表单中有必填字段并且它们未通过验证,因为事实证明,数据没有被传递回 Django(通过覆盖 'is_valid()' 和打印来验证表单数据,以及在我的模板中打印 {{ wizard.form.errors }})。可能值得注意的是,在我将其拆分之前该表单运行良好。

以下是相关代码的简化版本。如果有人有一些指示,那就太好了。我不是这方面的专家,原始代码不是我写的,所以我会尽我所能回答任何问题。谢谢!:

VIEWS.PY

FORMS = [("venue", RegisterBusinessFormVenue),
         ("manager", RegisterBusinessFormManager),
         ("extras", RegisterBusinessFormExtras)]

TEMPLATES = {"venue": "registrationVenue.html",
             "manager": "registrationManager.html",
             "extras": "registrationExtras.html"}


class RegisterBusinessView(SessionWizardView):
    file_storage = FileSystemStorage(location=os.path.join('/var/www/', 'logos'))

    def get_template_names(self):
        return TEMPLATES[self.steps.current]

    def done(self, form_list, **kwargs):
        return HttpResponseRedirect(reverse_lazy('submission_page_view'))

MODELS.PY

class RegisterBusinessFormVenue(forms.Form):
    venue_name = forms.CharField(label='Venue Name', max_length=128)

class RegisterBusinessFormManager(forms.Form):
    manager_first_name = forms.CharField(label='First Name', max_length=255)

class RegisterBusinessFormExtras(forms.Form):
     website = forms.URLField(label="Website", required=False)

URLS.PY

 url(r'^register/', RegisterBusinessView.as_view(FORMS), name='register_business_view')

模板

{% extends "base.html" %}
{% load staticfiles %}

{% block stylesheet %}
   <link rel="stylesheet" href="{% static 'css/registration.css' %}">
{% endblock stylesheet %}

{% block content %}
<div class="page-header">
    <h1>Register your business</h1>
</div>

<form class="form-horizontal" role="form" action="" method="POST">{% csrf_token %}
    {{ wizard.management_form }}
    {{ wizard.form.errors}}
    {{ wizard.form.non_field_errors}}
    <legend>Event Venue Information</legend>
    <div class="form-group required {% if wizard.form.venue_name.errors %}has-error{% endif %}">
        <label for="inputVenueName" class="col-sm-3 control-label">{{ wizard.form.venue_name.label }}</label>
        <div class="col-sm-9">
            <input type="text" class="form-control"
                   name="{{ wizard.form.venue_name.name }}"
                   id="inputVenueName"
                   {% if wizard.form.venue_name.value %}value="{{ wizard.form.venue_name.value }}"{% endif %}
                   placeholder="Venue name where events are held"
                   spellcheck="true">
        </div>
    </div>

    <div class="register-btn-block">
        <button type="submit">Register</button>
    </div>
</form>
{% endblock content %}

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    我回答了我自己的问题。这对我来说是一个愚蠢的错误:我没有使用向导为我的 html 标记提供 id 和 name。在上面的模板中,我有“label for”和“id”属性,它们应该填充值“{{ wizard.form.venue_name.id_for_label }}”。对于“名称”属性,应使用“{{ wizard.form.venue_name.html_name }}”填充。

    可以使用的预定义值位于here。进行这些更改后,表单数据已正确提交到服务器。

    【讨论】:

      猜你喜欢
      • 2015-02-02
      • 2015-12-11
      • 2022-01-14
      • 2018-10-23
      • 2018-05-07
      • 1970-01-01
      • 2010-12-01
      • 2016-08-30
      • 2015-12-26
      相关资源
      最近更新 更多