我需要提取消息和字段。
例如,我有这个django表单错误结果
<ul class="errorlist">
<li>__all__
<ul class="errorlist nonfield">
<li>Pointofsale with this Official receipt and Company already exists.</li>
</ul>
</li>
</ul>
来自此代码的输出
def post_sale(request):
sale_form = request["data"]
if sale_form.is_valid():
save_form.save()
else:
print save_form.errors
但我需要实现的是获取没有标记的消息,所以我可以用纯字符串/文本返回这些消息。
def post_sale(request):
sale_form = request["data"]
if sale_form.is_valid():
save_form.save()
else:
# This is just pseudo code
for field in save_form.errors:
field = str(field["field"})
message = str(field["error_message"])
print "Sale Error Detail"
print field
print message
error_message = { 'field':field,'message':message }
error_messages.append(error_message )
输出结果为:
Sale Error Detail
(the field where form error exists)
Pointofsale with this Official receipt and Company already exists.
谢谢,请告诉我是否有问题或需要澄清的事情,以便我能解决。
答案 0 :(得分:3)
绑定表单的errors
属性将包含该表单引发的所有错误,如字典。键是字段或其他特殊值(例如__all__
),值是一个或多个错误的列表。
以下是一个关于其工作原理的简单示例:
>>> from django import forms
>>> class MyForm(forms.Form):
... name = forms.CharField()
... email = forms.EmailField()
...
>>> f = MyForm() # Note, this is an unbound form
>>> f.is_valid()
False
>>> f.errors # No errors
{}
>>> f = MyForm({}) # Now, the form is bound (to an empty dictionary)
>>> f.is_valid()
False
>>> f.errors # dictionary of errors
{'name': [u'This field is required.'], 'email': [u'This field is required.']}
在您看来,根据您的需要,您只需返回form.errors
的值,或将其解析为您需要的任何结构。
for field, errors in form.errors.items():
print('Field: {} Errors: {}'.format(field, ','.join(errors))
对于您提到的特定错误,它是因覆盖clean()
方法而引发的自定义错误 - 这就是为什么它列在特殊标识符__all__
下而不是特定标识符下的原因字段。
forms reference, under validation:
中提到了这一点请注意,
Form.clean()
覆盖引发的任何错误都不会 特别是与任何领域相关联。他们进入一个特殊的 “field”(称为__all__
),您可以通过 如果您需要non_field_errors()
方法。如果要附加错误 对于表单中的特定字段,您需要调用add_error()
。