首页 > 解决方案 > 如何正确验证 ModelForm(最佳实践)?

问题描述

我有一个需要验证的 ModelForm。我目前正在使用自定义验证器函数覆盖 clean() 方法。如果出现问题,这些验证器会引发 ValidationError。如果一切都很好 - 他们什么也不做。我有两个问题:

  1. 这种方法是一个好习惯吗?

  2. 我用以下方式命名我的验证器函数:ensure_SOMETHING(例如 ensure_circular_reference_nonexistence(...)、ensure_max_depth_limit_is_respected(...) 等)。再次,这是一个好习惯吗?我还没有看到其他用户在他们的函数名称中“确保”。

100% 清楚,这就是我的 clean() 方法的样子:

def clean(self, *args, **kwargs):
    ensure_circular_reference_nonexistence(...)
    ensure_max_depth_limit_is_respected(...)
    return super(MyForm, self).clean(*args, **kwargs)

标签: djangodjango-forms

解决方案


我觉得你很好。但是您应该知道,清洁和验证不是一回事。这就是为什么 django forms 有 is_valid 方法和 clean 方法的原因。

如果您在那里所做的验证,就像它看起来的那样,那么您最好使用您的函数扩展 is_valid 方法。

它不会阻止您调用 clean 方法。事实上,你也应该调用 clean 方法。


推荐阅读