PageRenderTime 13ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/modeltests/custom_pk/fields.py

https://code.google.com/p/mango-py/
Python | 55 lines | 46 code | 9 blank | 0 comment | 2 complexity | 082475a702dcf1f38f41cc1b66dc10e6 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. import random
  2. import string
  3. from django.db import models
  4. class MyWrapper(object):
  5. def __init__(self, value):
  6. self.value = value
  7. def __repr__(self):
  8. return "<%s: %s>" % (self.__class__.__name__, self.value)
  9. def __unicode__(self):
  10. return self.value
  11. def __eq__(self, other):
  12. if isinstance(other, self.__class__):
  13. return self.value == other.value
  14. return self.value == other
  15. class MyAutoField(models.CharField):
  16. __metaclass__ = models.SubfieldBase
  17. def __init__(self, *args, **kwargs):
  18. kwargs['max_length'] = 10
  19. super(MyAutoField, self).__init__(*args, **kwargs)
  20. def pre_save(self, instance, add):
  21. value = getattr(instance, self.attname, None)
  22. if not value:
  23. value = MyWrapper(''.join(random.sample(string.lowercase, 10)))
  24. setattr(instance, self.attname, value)
  25. return value
  26. def to_python(self, value):
  27. if not value:
  28. return
  29. if not isinstance(value, MyWrapper):
  30. value = MyWrapper(value)
  31. return value
  32. def get_db_prep_save(self, value, connection):
  33. if not value:
  34. return
  35. if isinstance(value, MyWrapper):
  36. return unicode(value)
  37. return value
  38. def get_db_prep_value(self, value, connection, prepared=False):
  39. if not value:
  40. return
  41. if isinstance(value, MyWrapper):
  42. return unicode(value)
  43. return value