功能变化: 字段错误时提示字段的verbase_name

pull/84/head
猿小天 2022-12-09 23:55:47 +08:00
parent 4e7119a90e
commit d05df2d778
2 changed files with 25 additions and 5 deletions

View File

@ -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)

View File

@ -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)