models.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from django.contrib.gis.db import models
  2. from django.utils.encoding import python_2_unicode_compatible
  3. from ..utils import gisfield_may_be_null
  4. @python_2_unicode_compatible
  5. class NamedModel(models.Model):
  6. name = models.CharField(max_length=30)
  7. objects = models.GeoManager()
  8. class Meta:
  9. abstract = True
  10. def __str__(self):
  11. return self.name
  12. class Country(NamedModel):
  13. mpoly = models.MultiPolygonField() # SRID, by default, is 4326
  14. class City(NamedModel):
  15. point = models.PointField()
  16. class Meta:
  17. app_label = 'geoapp'
  18. # This is an inherited model from City
  19. class PennsylvaniaCity(City):
  20. county = models.CharField(max_length=30)
  21. founded = models.DateTimeField(null=True)
  22. # TODO: This should be implicitly inherited.
  23. objects = models.GeoManager()
  24. class Meta:
  25. app_label = 'geoapp'
  26. class State(NamedModel):
  27. poly = models.PolygonField(null=gisfield_may_be_null) # Allowing NULL geometries here.
  28. class Meta:
  29. app_label = 'geoapp'
  30. class Track(NamedModel):
  31. line = models.LineStringField()
  32. class MultiFields(NamedModel):
  33. city = models.ForeignKey(City)
  34. point = models.PointField()
  35. poly = models.PolygonField()
  36. class Truth(models.Model):
  37. val = models.BooleanField(default=False)
  38. objects = models.GeoManager()
  39. class Feature(NamedModel):
  40. geom = models.GeometryField()
  41. class MinusOneSRID(models.Model):
  42. geom = models.PointField(srid=-1) # Minus one SRID.
  43. objects = models.GeoManager()
  44. class NonConcreteField(models.IntegerField):
  45. def db_type(self, connection):
  46. return None
  47. def get_attname_column(self):
  48. attname, column = super(NonConcreteField, self).get_attname_column()
  49. return attname, None
  50. class NonConcreteModel(NamedModel):
  51. non_concrete = NonConcreteField()
  52. point = models.PointField(geography=True)