class ArrayField(forms.Field):
def __init__(self, min_length=None, max_length=None, *args, **kwargs):
self.base_type = kwargs.pop('base_type', None)
self.min_length = min_length
self.max_length = max_length
super(ArrayField, self).__init__(*args, **kwargs)
def validate(self, value):
super().validate(value)
if self.min_length:
if not value or len(value) < self.min_length:
raise ValidationError("Need at least %s values " % self.min_length)
if self.max_length:
if value and len(value) > self.max_length:
raise ValidationError("Need at most %s values" % self.max_length)
def base_clean(self, value):
if self.base_type:
if isinstance(self.base_type, forms.FileField):
self.base_type.clean(value)
else:
raise ValidationError("Nested field type not error")
return value
def clean(self, value):
try:
if value in self.empty_values:
pass
else:
value = json.loads(value)
if not isinstance(value, list):
raise ValidationError("Must be array type")
except json.decoder.JSONDecodeError:
raise ValidationError("This field is not valid array type")
value = [self.base_clean(subValue) for subValue in value] if value else []
return super(ArrayField, self).clean(value)
``
Django 自定义field
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。