Django 自定义field

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)
``
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容