修复部分情况下提取 serializer 的错误信息的错误

This commit is contained in:
virusdefender
2019-03-11 11:30:30 +08:00
parent 6b7654a0c3
commit 6ef16c8253

View File

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