【发布时间】:2014-02-10 13:48:12
【问题描述】:
我对 Django 很陌生,并且一直在玩 ModelForms。到目前为止,我已经能够轻松地创建 ModelForms。但是,有一个问题似乎让我有些烦恼:
当用户填写表单时,如果出现错误(比如 int 而不是 char 或缺少 blank=False 值),表单会吐出错误并且似乎忘记了 em> 表单验证失败时用户输入的值。我想知道是否有办法记住这些值,以便用户不必再次输入它们。
目前,我有以下内容:
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>
【问题讨论】:
-
不,这应该是默认行为。请您出示您的表单模板吗?
-
听起来您的模板有问题。绝对与ajax无关
-
@DanielRoseman,Anentropic:感谢您的评论。您所说的很有道理,因为当我使用
{{form_as.p}}时,一切都很好,即使出现错误,它似乎也能记住用户输入的值。我现在展示了我的模板(因为表单标记很大,所以只有一个字段)。想知道我在做什么与{{form_as.p}}不同。 -
仅供参考:我正在使用 twitter bootstrap 生成表单标记。
标签: python django django-models django-forms