#coding=utf-8 from rest_framework import fields def dump_serializer_errors(serializer): error_messages = { u'blank': u'此字段不能为空', u'required': u'此字段必填', u'max_length':u'此字段不超过%d个字符', u'min_length':u'此字段不少于%d个字符', u'null': u'该字段不能为空' # This field may not be null } field_error_messages = { fields.BooleanField:{ u'invalid': u'此字段不是一个合法的布尔值' }, fields.CharField: { u'invalid': u'此字段不是一个合法的字符串' }, fields.NullBooleanField: { u'invalid': u'此字段不是一个合法的布尔值' }, fields.EmailField: { u'invalid': u'邮箱格式不正确' }, fields.RegexField: { u'invalid': u'此字段没有匹配的一个必要的模板' }, fields.SlugField: { u'invalid': u'此字段不是一个合法的slug,应该由字母,数字,下划线,连字符组成', u'invalid_unicode': u'此字段不是一个合法的slug,应该由unicode字母,数字,下划线,连字符组成' }, fields.URLField: { u'invalid': u'此字段不是一个合法的URL' }, fields.UUIDField: { u'invalid': u'此字段不是一个合法的UUID' }, fields.IPAddressField: { u'invalid': u'此字段不是一个合法的IPv4或者IPv6地址' }, fields.IntegerField: { u'invalid': u'此字段不是一个合法的整数', u'max_value': u'此字段的数值要小于等于%d', u'min_value': u'此字段的数值要大于等于%d', u'max_string_length': u'此字段长度超过1000', }, fields.FloatField: { u'invalid': u'此字段不是一个合法的浮点数', u'max_value': u'此字段的数值要小于等于%d', u'min_value': u'此字段的数值要大于等于%d', u'max_string_length': u'此字段长度超过1000', }, fields.DecimalField: { u'invalid': u'此字段不是一个合法的数字', u'max_value': u'此字段的数值要小于等于%d', u'min_value': u'此字段的数值要大于等于%d', u'max_digits': u'此字段的数值不超过%d位', u'max_decimal_places': u'此字段十进制位不超过%d', u'max_whole_digits': u'此字段小数点前的数字不超过%d。', u'max_string_length': u'此字段长度超过1000', }, fields.DateTimeField: { u'invalid': u'日期时间格式不合法', u'date': u'不能只输入日期,应输入日期和时间', u'make_aware': u'时区%d不合法', u'overflow': u'日期时间超出范围', }, fields.DateField: { u'invalid': u'日期格式不合法', u'date': u'应输入日期,不能输入日期和时间', }, fields.TimeField: { u'invalid': u'时间格式不合法', }, fields.DurationField: { u'invalid': u'时间段格式不合法,应该用格式:%d', }, fields.ChoiceField: { u'invalid_choice': u'此字段不是一个合法的选项', }, fields.MultipleChoiceField: { u'invalid_choice': u'此字段不是一个合法的选项', u'not_a_list': u'应输入数组(list)格式', u'empty': u'此选项不能为空', }, fields.FilePathField: { u'invalid_choice': u'此字段不是一个合法的路径', }, fields.FileField: { u'required': u'没有提交文件', u'invalid': u'提交的不是文件,请检查表单的编码类型', u'no_name': u'没有文件名', u'empty': u'提交的是一个空文件', u'max_length': u'文件内容要小于%d个字符', }, fields.ImageField: { u'invalid_image': u'提交的不是图片文件或者图片文件损坏,请提交一个合法的图片文件', }, fields.ListField: { u'not_a_list': u'此字段应传入数组(list)类型', u'empty': u'传入的list不能为空', u'min_length': u'该字段至少要%d个元素', u'max_length': u'该字段最多能有%d个元素', }, fields.DictField: { u'not_a_dict': u'此字段应传入字典(dict)类型', }, fields.JSONField: { u'invalid': u'此字段不是一个合法的JSON类型' }, fields.ModelField: { u'max_length': u'此字段长度要小于等于%d个字符' } } result = [u'数据错误
', ] for i in range(0, len(serializer.errors.keys())): k = serializer.errors.keys()[i] v = serializer.errors.values()[i] field = serializer.fields.get(k) label = field.label if label: label += ' - ' else: label = '' error_detail = v[0] try: msg = field_error_messages[type(field)][error_detail.code] if type(field) == fields.IntegerField or type(field) == fields.FloatField: if error_detail.code == u'max_value': msg = msg % field.max_value if error_detail.code == u'min_value': msg = msg % field.min_value if type(field) == fields.DecimalField: if error_detail.code == u'max_value': msg = msg % field.max_value if error_detail.code == u'min_value': msg = msg % field.min_value if error_detail.code == u'max_digits': msg = msg % field.max_digits if error_detail.code == u'max_decimal_places': msg = msg % field.decimal_places if error_detail.code == u'max_whole_digits': msg = msg % field.max_whole_digits if type(field) == fields.DateTimeField: if error_detail.code == u'make_aware': msg = msg % field.timezone if type(field) == fields.DurationField: if error_detail.code == u'invalid': msg = msg % u'[DD] [HH:[MM:]]ss[.uuuuuu]' if type(field) == fields.DateTimeField: if error_detail.code == u'make_aware': msg = msg % field.timezone if type(field) == fields.ListField: if error_detail.code == u'min_length': msg = msg % field.min_length if error_detail.code == u'max_length': msg = msg % field.max_length if type(field) == fields.ModelField: if error_detail.code == u'max_length': msg = msg % field.max_length except: try: msg = error_messages[error_detail.code] if error_detail.code == u'max_length': msg = msg % field.max_length if error_detail.code == u'min_length': msg = msg % field.min_length except: msg = unicode(error_detail) msg = label + msg result.append(msg) return u'
'.join(result)