如何为模型字段定义验证并优雅地处理错误?

时间:2019-05-27 13:15:11

标签: validation django-models django-rest-framework django-forms

Django 1.6

我已经经历过文档,StackOverflow和git讨论。不过,我仍然有一些疑问。

1-如果我在模型字段中定义验证器,那么我以forms.formforms.ModelForm形式使用的内容是否重要?
2-如果我要在模型清洁方法中进行验证,那我应该如何处理那里的验证错误(基本上是显示模板)?通常我会收到500台服务器错误。
3-从模型字段验证器引发错误会影响DRF序列化程序,还是会显示错误消息?
4-如果必须使用forms.ModelForm,那么在使用forms.form的同时如何实现类似的功能?

现在,我在表单和模型字段中使用forms.form,已经完成了以下工作。

def validate_name(value, message=None, code=None,):
    """
    Validation ensures a value consists of only letters, space and dot.
    """
    reg = re.compile("^[\\p{L} .]+$")
    if not reg.match(value):
        raise ValidationError(message or _("Invalid - Allowed characters: a-z, A-Z, space, dot."), code=code or 'invalid_name')

模型字段

first_name = models.CharField(_('first name'), max_length=200, blank=True, validators=[validate_name])

现在要执行validate_name,我需要调用full_clean()并最终遇到500个服务器错误。

任何更好的方法或建议都可以对模型进行全局验证。

0 个答案:

没有答案