Model validation: can I access ValidationError code?
我有两个直接相关的问题。
Django 文档建议使用以下代码引发 ValidationError:
1 2 3 4 5 | # Good ValidationError(_('Invalid value'), code='invalid') # Bad ValidationError(_('Invalid value')) |
如何在测试中访问此代码?我对捕获的异常使用
这和之前问的问题几乎一样(我不使用表格)。
相关问题:上面链接的同一个文档页面给出了一些如何引发 ValidationError 的示例,虽然 "Raising ValidationError" 部分建议使用该代码,"在实践中使用验证" 再也没有提到它,和那里的例子不使用代码。我想知道这是否表明此功能已过时。
我学会了如何在 PyCharm 中调试 Django 测试,它帮助我找到了解决方案。为他人着想:
错误代码可通过
1 2 3 4 5 6 7 8 9 10 | 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 方法),将字段名称(上面的"数字")替换为