2017-09-04 74 views
0

我有两个直接相关的问题。模型验证:我可以访问ValidationError代码吗?

Django documentation建议用代码提高ValidationError:

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

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

我如何可以访问测试代码?我的所有尝试使用as_dataas_json,或者干脆.code上捕获的异常失败。不幸的是,我看到的所有建议都与表单验证有关。我的测试验证了模型。

这几乎是问before(我不使用形式)同样的问题。

相关问题:上面链接的文档页面给出了一些关于如何引发ValidationError的例子,而“引发ValidationError”部分推荐使用代码,“在实践中使用验证”再也没有提及它,没有使用代码。我想知道这是否表明这个功能是陈旧的。

+0

你正赶上只是尽量把它放在'目录(E)'和看到输出异常。它会显示该对象的可用方法和变量 –

+0

它输出'['__cause__','__class__','__context__','__delattr__','__dict__','__dir__','__doc__','__eq__',' __format__”, '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__' ,'__reduce__','__reduce_ex__','__repr__','__setattr__','__setstate__','__sizeof__','__str__','__subclasshook__','__suppress_context__','__traceback__','__weakref__','args' error_dict','message_dict','messages','update_error_dict','with_traceback']'。不知道该怎么办。 – texnic

+0

我认为'error_dict'或'message_dict'或'messages'是要尝试的属性。只需尝试e.messages –

回答

0

我学会了如何调试Django的测试在PyCharm,它帮助我找到一个解决方案。对于其他人的缘故:

的错误代码是通过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__(上述“编号”)。

相关问题