django - 模型验证 : can I access ValidationError code?

标签 django validation testing

我有两个直接相关的问题。

Django documentation建议使用代码引发 ValidationError:

# Good
ValidationError(_('Invalid value'), code='invalid')

# Bad
ValidationError(_('Invalid value'))

如何在测试中访问此代码?我对捕获的异常使用 as_dataas_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/

相关文章:

Django:在页面中缓存除用户身份验证之外的所有内容

validation - 验证集是否用于更新神经网络?

c# - 标准化验证和错误检查C#

java - 类级约束验证错误使 Arjuna TwoPhaseCoordinator.beforeCompletion 失败

windows - 在哪里可以找到文件类型验证程序?

python - 创建一个函数来为上传的图像位置指定目录

python - 属性错误 : 'NoneType' object has no attribute '_default_manager' when running lettuce with django rest framework

python - Django:过滤请求结果以仅包含与请求用户相关的数据

go - 有没有一种好方法来更新传递给Golang中子测试的结构

javascript - 如何使 testcafe 与绝对进口一起工作?