如何记录所有Django表单验证错误?

如何记录所有Django表单验证错误?,django,django-forms,Django,Django Forms,在Django应用程序中,我有一个forms.py文件,其中定义了与表单输入屏幕相对应的类的加载。这些类中的每一个都会在特定于属性/字段的_clean()函数或表单类的整体clean()函数中进行一些验证。如果这些clean()函数中的任何一个验证失败,我将引发如下错误: raise forms.ValidationError('Invalid value dude!!') import logging logger = logging.getLogger(__

在Django应用程序中,我有一个forms.py文件,其中定义了与表单输入屏幕相对应的类的加载。这些类中的每一个都会在特定于属性/字段的_clean()函数或表单类的整体clean()函数中进行一些验证。如果这些clean()函数中的任何一个验证失败,我将引发如下错误:

raise forms.ValidationError('Invalid value dude!!')                
import logging
logger = logging.getLogger(__name__)
当出现这样的错误时,应用程序将捕获错误并将其显示在表单上供用户使用

我还在该文件顶部定义了一个记录器,如下所示:

raise forms.ValidationError('Invalid value dude!!')                
import logging
logger = logging.getLogger(__name__)

现在,除了向用户报告ValidationErrors之外,我还想捕获它们并将它们记录为错误。是否有一些通用且优雅的方法可以让记录器记录所有此类错误,而不改变影响应用程序用户的任何其他行为?

验证结束后,您可以扩展
表单来记录错误:

class LoggingMixin(object):
    def full_clean(self):
        super(LoggingMixin, self).full_clean()
        for field, errors in self.errors.iteritems():
            logger.info('Form error in %s: %s', ', '.join(errors))
然后使用日志mixin定义表单:

class MyForm(LoggingMixin, forms.Form):
    ...
当Django 1.7发布时,您还可以捕获异常消息。这将在引发原始异常时为您提供这些异常(
表单
会进行更多检查):


警告:在Django中使用
add_error
对覆盖
add_error
方法没有任何作用,值得一提的是,该方法在当前Django开发版本中是新的。@Ghopper21确实,谢谢!这可能会让人困惑,因为我的解决方案在旧版本中会自动失败。我使用的是Django 1.5.4。我尝试使用上面描述的第一种技术。这似乎没有任何效果。有什么想法吗?