修复部分情况下提取 serializer 的错误信息的错误
This commit is contained in:
@@ -89,20 +89,22 @@ class APIView(View):
|
|||||||
def error(self, msg="error", err="error"):
|
def error(self, msg="error", err="error"):
|
||||||
return self.response({"error": err, "data": msg})
|
return self.response({"error": err, "data": msg})
|
||||||
|
|
||||||
def _serializer_error_to_str(self, errors):
|
def extract_errors(self, errors, key="field"):
|
||||||
for k, v in errors.items():
|
if isinstance(errors, dict):
|
||||||
if isinstance(v, list):
|
if not errors:
|
||||||
return k, v[0]
|
return key, "Invalid field"
|
||||||
elif isinstance(v, OrderedDict):
|
key = list(errors.keys())[0]
|
||||||
for _k, _v in v.items():
|
return self.extract_errors(errors.pop(key), key)
|
||||||
return self._serializer_error_to_str({_k: _v})
|
elif isinstance(errors, list):
|
||||||
|
return self.extract_errors(errors[0], key)
|
||||||
|
|
||||||
def invalid_serializer(self, serializer):
|
def invalid_serializer(self, serializer):
|
||||||
k, v = self._serializer_error_to_str(serializer.errors)
|
key, error = self.extract_errors(serializer.errors)
|
||||||
if k != "non_field_errors":
|
if key == "non_field_errors":
|
||||||
return self.error(err="invalid-" + k, msg=k + ": " + v)
|
msg = error
|
||||||
else:
|
else:
|
||||||
return self.error(err="invalid-field", msg=v)
|
msg = f"{key}: {error}"
|
||||||
|
return self.error(err=f"invalid-{key}", msg=msg)
|
||||||
|
|
||||||
def server_error(self):
|
def server_error(self):
|
||||||
return self.error(err="server-error", msg="server error")
|
return self.error(err="server-error", msg="server error")
|
||||||
|
|||||||
Reference in New Issue
Block a user