hen*_*ski 15 django django-forms
清除数据后,如何在表单顶部添加错误?我有一个对象需要对外部应用程序(谷歌地图)进行REST调用作为预保存条件,这可能会失败,这意味着我需要我的用户更正表单中的数据.所以我清理数据,然后尝试保存并添加到表单错误,如果保存不起作用:
if request.method == "POST":
#clean form data
try:
profile.save()
return HttpResponseRedirect(reverse("some_page", args=[some.args]))
except ValueError:
our_form.errors.__all__ = [u"error message goes here"]
return render_to_response(template_name, {"ourform": our_form,},
context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
这无法在我的单元测试中返回错误文本(在{{form.non_field_errors}}中查找它),然后当我通过调试器运行它时,错误没有被添加到表单错误字典中它们到达render_to_response行,也不到our_form树中的任何其他位置.为什么这不起作用?如何在清理表单后将错误添加到表单顶部?
Gab*_*ley 18
你真的想在表单验证期间执行此操作并从那里引发ValidationError ...但是如果你这样设置你就会想要访问_errors添加新消息.尝试这样的事情:
from django.forms.util import ErrorList
our_form._errors["field_name"] = ErrorList([u"error message goes here"])
Run Code Online (Sandbox Code Playgroud)
bmi*_*lac 12
可以使用常量NON_FIELD_ERRORS字典键(__all__默认情况下)添加非字段错误:
from django import forms
errors = my_form._errors.setdefault(forms.forms.NON_FIELD_ERRORS, forms.util.ErrorList())
errors.append("My error here")
Run Code Online (Sandbox Code Playgroud)
Lou*_*uis 10
在Django 1.7或更高版本中,我会这样做:
form.add_error(field_name, "Some message")
Run Code Online (Sandbox Code Playgroud)
该方法add_error在1.7中添加.该form变量是我要处理的形式,并且field_name是特定的字段名称或None如果我想不与特定的字段相关联的错误.
在Django 1.6中我会做类似的事情:
from django.forms.forms import NON_FIELD_ERRORS
errors = form._errors.setdefault(field_name, form.error_class())
errors.append("Some message")
Run Code Online (Sandbox Code Playgroud)
在上面的代码中form是我想要操作的表单,并且field_name是我想要添加错误的字段名称.field_name可以设置为NON_FIELD_ERRORS添加与特定字段无关的错误.我form.error_class()用来生成错误消息的空列表.这就是Django 1.6在内部创建空列表而不是ErrorList()直接实例化的方式.
你应该提出验证错误.
为什么不将验证放在表单的干净方法中
class ProfileForm(forms.Form):
def clean(self):
try:
#Make a call to the API and verify it works well
except:
raise forms.ValidationError('Your address is not locatable by Google Maps')
Run Code Online (Sandbox Code Playgroud)
这样,你只需要form.is_valid()视图中的标准.
您的原始解决方案几乎就在那里.这是我构建的基本Form类,它允许我做同样的事情,即向表单添加非字段错误消息:
from django import forms
from django.forms.util import ErrorDict
from django.forms.forms import NON_FIELD_ERRORS
class MyBaseForm(forms.Form):
def add_form_error(self, message):
if not self._errors:
self._errors = ErrorDict()
if not NON_FIELD_ERRORS in self._errors:
self._errors[NON_FIELD_ERRORS] = self.error_class()
self._errors[NON_FIELD_ERRORS].append(message)
class MyForm(MyBaseForm):
....
Run Code Online (Sandbox Code Playgroud)
我的所有表单都扩展了这个类,所以我可以简单地调用add_form_error()方法来添加另一个错误消息.
| 归档时间: |
|
| 查看次数: |
20844 次 |
| 最近记录: |