2017-09-04 67 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__(上述「編號」)。

相關問題