功能变化: 字段错误时提示字段的verbase_name
parent
4e7119a90e
commit
d05df2d778
|
@ -10,6 +10,7 @@ import logging
|
|||
import traceback
|
||||
|
||||
from django.db.models import ProtectedError
|
||||
from django.http import Http404
|
||||
from rest_framework.exceptions import APIException as DRFAPIException, AuthenticationFailed
|
||||
from rest_framework.views import set_rollback
|
||||
|
||||
|
@ -33,9 +34,15 @@ def CustomExceptionHandler(ex, context):
|
|||
if isinstance(ex, AuthenticationFailed):
|
||||
code = 401
|
||||
msg = ex.detail
|
||||
elif isinstance(ex,Http404):
|
||||
code = 400
|
||||
msg = "接口地址不正确"
|
||||
elif isinstance(ex, DRFAPIException):
|
||||
set_rollback()
|
||||
msg = ex.detail
|
||||
for k, v in msg.items():
|
||||
for i in v:
|
||||
msg = "%s:%s" % (k, i)
|
||||
elif isinstance(ex, ProtectedError):
|
||||
set_rollback()
|
||||
msg = "删除失败:该条数据与其他数据有相关绑定"
|
||||
|
@ -45,9 +52,4 @@ def CustomExceptionHandler(ex, context):
|
|||
elif isinstance(ex, Exception):
|
||||
logger.error(traceback.format_exc())
|
||||
msg = str(ex)
|
||||
|
||||
# errorMsg = msg
|
||||
# for key in errorMsg:
|
||||
# msg = errorMsg[key][0]
|
||||
|
||||
return ErrorResponse(msg=msg, code=code)
|
||||
|
|
|
@ -104,6 +104,24 @@ class CustomModelSerializer(DynamicFieldsMixin, ModelSerializer):
|
|||
return getattr(self.request.user, "id", None)
|
||||
return None
|
||||
|
||||
@property
|
||||
def errors(self):
|
||||
# get errors
|
||||
errors = super().errors
|
||||
verbose_errors = {}
|
||||
|
||||
# fields = { field.name: field.verbose_name } for each field in model
|
||||
fields = {field.name: field.verbose_name for field in
|
||||
self.Meta.model._meta.get_fields() if hasattr(field, 'verbose_name')}
|
||||
|
||||
# iterate over errors and replace error key with verbose name if exists
|
||||
for field_name, error in errors.items():
|
||||
if field_name in fields:
|
||||
verbose_errors[str(fields[field_name])] = error
|
||||
else:
|
||||
verbose_errors[field_name] = error
|
||||
return verbose_errors
|
||||
|
||||
# @cached_property
|
||||
# def fields(self):
|
||||
# fields = BindingDict(self)
|
||||
|
|
Loading…
Reference in New Issue