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