我是Django的新手,并且一直在使用ModelForms。到目前为止,我已经能够轻松地创建ModelForms。但是,有一个问题似乎让我有点烦恼:
当用户填写表单时,如果出现错误(例如int
而不是char
或缺少blank=False
值),则表单会显示错误,并且似乎忘记用户在表单无法验证时输入的值。我想知道是否有办法记住这些值,以便用户不必再次输入它们。
目前,我有以下内容:
class ContactForm(CreateView):
form_class = ContactForm
template_name = "superform.html"
success_url = '/ty/'
def form_valid(self, form):
# do something useful with validated form
return super(ContactForm, self).form_valid(form)
def form_invalid(self, form):
# do something useful with invalidated form.
return super(ContactForm,self).form_invalid(form)
我假设我需要在form_invalid
中执行某些操作以将值传递回表单 - 但我不确定如何执行此操作(?)。
如果有人能指出我正确的方向,我真的很感激。
感谢。
- - 编辑---
<form class="form" role="form" action="{% url 'coolurl' %}" method="post">{% csrf_token %}
{% if form.non_field_errors %}
<div class="alert">
{% for error in form.non_field_errors %}
<span class="label">Error: {{ error|escape }}</span>
{% endfor %}
</div>
{% endif %}
<div class="form-group">
{% if form.name.errors %}
<div class="alert">
{% for error in form.name.errors %}
<span class="label">Error: {{ error|escape }}</span>
{% endfor %}
</div>
{% endif %}
<label class="col-sm-3" for="id_name">Name:</label>
<div class="col-sm-6">
<input class="form-control"
id="id_name"
type="text"
name="name"
maxlength="128"
placeholder="Your name..">
</div>
</div>
<button type="submit" class="btn btn-success">Submit</button>
</form>
答案 0 :(得分:2)
尝试提及input
标记的值:
<input class="form-control"
id="id_name"
type="text"
name="name"
maxlength="128"
value="{{ form.name.value|default_if_none:'' }}"
placeholder="Your name..">
</div>
答案 1 :(得分:1)
你已经承担了通过在HTML中对它们进行硬编码而使这些字段远离Django的责任。这意味着Django无法插入当前值;不仅在错误后重新显示,而且如果您有一个修改现有数据库内容的表单。
不要那样做。我知道你不想只是j form.as_p
,但有一个很好的中间立场:用{{ form.my_field }}
输出模板中的每个字段。您可以将相关的类添加到forms.py中定义的字段中,然后Django将正确地输出它。