fields.py 877 B

12345678910111213141516171819202122232425262728293031323334
  1. import collections
  2. from django.db import models
  3. class CommaSeparatedList(list):
  4. """ str representation is useful for displayint in forms
  5. """
  6. def __str__(self):
  7. return ','.join(self)
  8. class CommaSeparatedCharField(models.CharField):
  9. "Implements comma-separated storage of lists"
  10. def from_db_value(self, value, expression, connection, context):
  11. if value is None:
  12. return value
  13. return CommaSeparatedList(value.split(','))
  14. def to_python(self, value):
  15. if isinstance(value, CommaSeparatedList):
  16. return value
  17. if value is None:
  18. return value
  19. return CommaSeparatedList([i.strip() for i in value.split(',')])
  20. def get_prep_value(self, value):
  21. if isinstance(value, collections.Iterable):
  22. return ','.join(value)
  23. else:
  24. return value