<p>处理所有验证错误(以及可能需要的任何其他错误)的干净方法是使用一个自定义的<code>EXCEPTION_HANDLER</code>来转换Django
<code>ValidationError</code>到一个DRF</p>
<p>见:</p>
<pre><code>from django.core.exceptions import ValidationError as DjangoValidationError
from rest_framework.exceptions import ValidationError as DRFValidationError
from rest_framework.views import exception_handler as drf_exception_handler
def exception_handler(exc, context):
if isinstance(exc, DjangoValidationError):
exc = DRFValidationError(detail=exc.message_dict)
return drf_exception_handler(exc, context)
"""
In settings:
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'path.to_module.drf.exception_handler',
}
"""
</code></pre>
<p>资料来源:<a href="https://gist.github.com/twidi/9d55486c36b6a51bdcb05ce3a763e79f" rel="nofollow noreferrer">https://gist.github.com/twidi/9d55486c36b6a51bdcb05ce3a763e79f</a></p>
<p>一个更深入的例子:<a href="https://github.com/HackSoftware/Styleguide-Example/blob/master/styleguide_example/api/mixins.py" rel="nofollow noreferrer">https://github.com/HackSoftware/Styleguide-Example/blob/master/styleguide_example/api/mixins.py</a></p>