models.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from django.contrib.postgres.fields import (
  2. ArrayField, HStoreField, IntegerRangeField, BigIntegerRangeField,
  3. FloatRangeField, DateTimeRangeField, DateRangeField,
  4. )
  5. from django.db import connection, models
  6. class IntegerArrayModel(models.Model):
  7. field = ArrayField(models.IntegerField())
  8. class NullableIntegerArrayModel(models.Model):
  9. field = ArrayField(models.IntegerField(), blank=True, null=True)
  10. class CharArrayModel(models.Model):
  11. field = ArrayField(models.CharField(max_length=10))
  12. class DateTimeArrayModel(models.Model):
  13. field = ArrayField(models.DateTimeField())
  14. class NestedIntegerArrayModel(models.Model):
  15. field = ArrayField(ArrayField(models.IntegerField()))
  16. class HStoreModel(models.Model):
  17. field = HStoreField(blank=True, null=True)
  18. class CharFieldModel(models.Model):
  19. field = models.CharField(max_length=16)
  20. class TextFieldModel(models.Model):
  21. field = models.TextField()
  22. # Only create this model for databases which support it
  23. if connection.vendor == 'postgresql' and connection.pg_version >= 90200:
  24. class RangesModel(models.Model):
  25. ints = IntegerRangeField(blank=True, null=True)
  26. bigints = BigIntegerRangeField(blank=True, null=True)
  27. floats = FloatRangeField(blank=True, null=True)
  28. timestamps = DateTimeRangeField(blank=True, null=True)
  29. dates = DateRangeField(blank=True, null=True)
  30. else:
  31. # create an object with this name so we don't have failing imports
  32. class RangesModel(object):
  33. pass
  34. class ArrayFieldSubclass(ArrayField):
  35. def __init__(self, *args, **kwargs):
  36. super(ArrayFieldSubclass, self).__init__(models.IntegerField())