Django形成整数数组字段

时间:2015-05-17 16:53:48

标签: arrays django

我想使用django表单来验证字段为Integer Array。实现这一目标的最佳方法是什么?我不想使用ChoiceField,我不确定实现这一目标的最简单方法是什么。那个问题有什么建议吗?

1 个答案:

答案 0 :(得分:2)

为了存储数组,我会使用django-picklefield或自定义字段,如下所示:

from django.db import models

class IntArrayField(models.TextField):
    __metaclass__ = models.SubfieldBase

    def __init__(self, *args, **kwargs):
        super(IntArrayField, self).__init__(*args, **kwargs)

    def to_python(self, value):
        if not value: 
            return None
        if isinstance(value, list):
            return value
        return [int(n) for n in value.split('|')]

    def get_db_prep_value(self, value):
        if not value: 
            return None
        assert(isinstance(value, list) or isinstance(value, tuple))
        return '|'.join(str(value))

    def value_to_string(self, obj):
        value = self._get_val_from_obj(obj)
        return self.get_db_prep_value(value)

要进行验证,您可以使用clean_fieldname()

def clean_fieldname(self):
        data = self.cleaned_data['fieldname']
        # if <data is not an int array>:
        #    raise forms.ValidationError("You must enter an int array.")

        return data

使用一些JavaScript代码验证输入并在客户端更容易输入int数组也很不错。