我有两个直接相关的问题。
Django documentation建议使用代码引发 ValidationError:
# Good
ValidationError(_('Invalid value'), code='invalid')
# Bad
ValidationError(_('Invalid value'))
如何在测试中访问此代码?我对捕获的异常使用 as_data
、as_json
或简单地使用 .code
的所有尝试都失败了。不幸的是,我看到的建议都与表单验证有关。我的测试验证了模型。
这几乎是同一个问题before (我不使用表格)。
相关问题:上面链接的同一个文档页面给出了几个如何引发 ValidationError 的例子,虽然“Raising ValidationError”部分推荐使用代码,“Using validation in practice”再也没有提到它,那里的例子不要使用代码。我想知道这是否表明此功能已过时。
最佳答案
我学习了如何在 PyCharm 中调试 Django 测试,它帮助我找到了解决方案。为他人着想:
错误代码可通过 exception.error_dict[field_name][err_no].code
访问。例如,以下检查引发了一个非常具体的错误:
def test_negative_photo_number(self):
"""Cannot create photo with negative photo number"""
with self.assertRaises(ValidationError) as ve_context:
self.create_photo(album_number=1, photo_number=-2)
e = ve_context.exception
print(e.error_dict)
self.assertEqual(len(e.error_dict.keys()), 1, 'Encountered more than one problematic field')
self.assertEqual(len(e.error_dict['number']), 1, 'Encountered more than one error')
self.assertEqual(e.error_dict['number'][0].code, 'min_value')
对于在字段验证器外部引发的 ValidationError(例如通过 model.clean 方法),将字段名称(上面的“数字”)替换为 __all__
。
关于django - 模型验证 : can I access ValidationError code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036952/