Django的表单框架是否使用Django消息框架?

2 投票
3 回答
944 浏览
提问于 2025-04-16 16:52

我正在使用django-registration,并开始了解Django的表单框架。我一直在用.to_p()这个方法来显示表单,但我想要更好的方式来展示表单数据,所以我在研究这个表单框架。

表单框架传递的错误信息会传递到Django的消息框架吗?

3 个回答

0

不,不会自动处理。你需要自己来处理这个问题。

 if not form.is_valid():
     # loop through form.errors and
     # convert that in messages.error
     # where appropriate
2

每个表单的字段都有自己的错误信息,这些信息保存在一个字典里……所以

class MyForm(Form):
    myfield = CharField()
    nullfield = CharField(blank=True)

在你进行验证的步骤之后,如果发现了一些表单错误,它们都会被存储在错误字典里,因此,

form = MyForm(request.GET)
if form.is_valid():
    ...
else:
    # assert form errors
    assert 0, form.errors

错误字典的样子会是这样的

{'myfield': [u'This field is required.']}

所以,每个错误都会被添加到错误字典中。你可以查看这个字典,并创建一个统一的错误信息,或者在你的视图中做其他任何你想做的事情。或者在模板中,你可以用

{%for err in form.errors%}
    ........
{%endfor %}

正如你所看到的,这里没有提到django消息应用……如果你真的想把这些错误信息传递给django消息应用,你可以尝试

for error in form.errors:
    request.user.message_set.create(message=form.errors['error'])
4

不,它们是完全独立的——这也是应该的,因为消息功能在 django.contrib 里,所以不能保证它一定会被启用。

显示错误的最佳方式是在表单内部,就像 as_p 方法那样。我使用一个模板标签来一次性显示每个字段及其相关的错误——这是对彼得·鲍姆加特纳的 display_field 标签 的修改版本。

撰写回答