我想使用django表单来验证字段为Integer Array。实现这一目标的最佳方法是什么?我不想使用ChoiceField,我不确定实现这一目标的最简单方法是什么。那个问题有什么建议吗?
答案 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数组也很不错。