import collections from django.db import models class CommaSeparatedList(list): """ str representation is useful for displayint in forms """ def __str__(self): return ','.join(self) class CommaSeparatedCharField(models.CharField): "Implements comma-separated storage of lists" def from_db_value(self, value, expression, connection, context): if value is None: return value return CommaSeparatedList(value.split(',')) def to_python(self, value): if isinstance(value, CommaSeparatedList): return value elif isinstance(value, collections.Iterable): return CommaSeparatedList(value) elif value is None: return value return CommaSeparatedList([i.strip() for i in value.split(',')]) def clean(self, *args, **kwargs): return super().clean(*args, **kwargs) def get_prep_value(self, value): if isinstance(value, collections.Iterable): return ','.join(value) else: return value