我在序列化程序中执行自定义字段级验证,需要引用另一个字段。
查看Validation documentation中的示例,我不清楚是否应该使用validate_<fieldname>
或validate
。看起来两者都有attrs
字典,因此从validate_<fieldname>
我可以轻松地引用另一个字段validate
(尽管validate
的说明表明你应该用它来访问多个领域)。那么为什么有这两种选择呢?在我的情况下,哪个选项使用正确?
答案 0 :(得分:17)
在ValidationError
内举起validate_<foo>()
会导致字段错误。
{'foo': ['Not a fooish value.']}
在ValidationError
内提升validate()
将导致非字段错误。
{'non_field_errors': ['Foo and bar are not compatible.']}
那为什么还有两种选择呢?
部分是因为上述原因,部分是因为序列化程序API在可能的情况下镜像了Django的表单API。在需要的地方存在一些差异,但validate
和validate_<foo>
样式相似。
就我而言,哪个选项使用正确?
判断呼叫,根据哪个错误消息更合适。