[Answered ]-Django form Integer array Field

2👍

For storing the array I would use a django-picklefield or a custom field like this:

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)

For validation you can use 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

And it’s also good to have some JavaScript code to validate input and make entering an int array easier on your client side.

👤nima

Leave a comment