diff --git a/backend/dvadmin/utils/exception.py b/backend/dvadmin/utils/exception.py index b9d2d51..2cf9150 100644 --- a/backend/dvadmin/utils/exception.py +++ b/backend/dvadmin/utils/exception.py @@ -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) diff --git a/backend/dvadmin/utils/serializers.py b/backend/dvadmin/utils/serializers.py index 90a685e..c2b047d 100644 --- a/backend/dvadmin/utils/serializers.py +++ b/backend/dvadmin/utils/serializers.py @@ -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)