1. from django.contrib.gis.db import models
    
  2. 
    
  3. 
    
  4. class NamedModel(models.Model):
    
  5.     name = models.CharField(max_length=25)
    
  6. 
    
  7.     class Meta:
    
  8.         abstract = True
    
  9. 
    
  10.     def __str__(self):
    
  11.         return self.name
    
  12. 
    
  13. 
    
  14. class State(NamedModel):
    
  15.     pass
    
  16. 
    
  17. 
    
  18. class County(NamedModel):
    
  19.     state = models.ForeignKey(State, models.CASCADE)
    
  20.     mpoly = models.MultiPolygonField(srid=4269, null=True)  # Multipolygon in NAD83
    
  21. 
    
  22. 
    
  23. class CountyFeat(NamedModel):
    
  24.     poly = models.PolygonField(srid=4269)
    
  25. 
    
  26. 
    
  27. class City(NamedModel):
    
  28.     name_txt = models.TextField(default="")
    
  29.     name_short = models.CharField(max_length=5)
    
  30.     population = models.IntegerField()
    
  31.     density = models.DecimalField(max_digits=7, decimal_places=1)
    
  32.     dt = models.DateField()
    
  33.     point = models.PointField()
    
  34. 
    
  35.     class Meta:
    
  36.         app_label = "layermap"
    
  37. 
    
  38. 
    
  39. class Interstate(NamedModel):
    
  40.     length = models.DecimalField(max_digits=6, decimal_places=2)
    
  41.     path = models.LineStringField()
    
  42. 
    
  43.     class Meta:
    
  44.         app_label = "layermap"
    
  45. 
    
  46. 
    
  47. # Same as `City` above, but for testing model inheritance.
    
  48. class CityBase(NamedModel):
    
  49.     population = models.IntegerField()
    
  50.     density = models.DecimalField(max_digits=7, decimal_places=1)
    
  51.     point = models.PointField()
    
  52. 
    
  53. 
    
  54. class ICity1(CityBase):
    
  55.     dt = models.DateField()
    
  56. 
    
  57.     class Meta(CityBase.Meta):
    
  58.         pass
    
  59. 
    
  60. 
    
  61. class ICity2(ICity1):
    
  62.     dt_time = models.DateTimeField(auto_now=True)
    
  63. 
    
  64.     class Meta(ICity1.Meta):
    
  65.         pass
    
  66. 
    
  67. 
    
  68. class Invalid(models.Model):
    
  69.     point = models.PointField()
    
  70. 
    
  71. 
    
  72. class HasNulls(models.Model):
    
  73.     uuid = models.UUIDField(primary_key=True, editable=False)
    
  74.     geom = models.PolygonField(srid=4326, blank=True, null=True)
    
  75.     datetime = models.DateTimeField(blank=True, null=True)
    
  76.     integer = models.IntegerField(blank=True, null=True)
    
  77.     num = models.FloatField(blank=True, null=True)
    
  78.     boolean = models.BooleanField(blank=True, null=True)
    
  79.     name = models.CharField(blank=True, null=True, max_length=20)
    
  80. 
    
  81. 
    
  82. class DoesNotAllowNulls(models.Model):
    
  83.     uuid = models.UUIDField(primary_key=True, editable=False)
    
  84.     geom = models.PolygonField(srid=4326)
    
  85.     datetime = models.DateTimeField()
    
  86.     integer = models.IntegerField()
    
  87.     num = models.FloatField()
    
  88.     boolean = models.BooleanField()
    
  89.     name = models.CharField(max_length=20)
    
  90. 
    
  91. 
    
  92. # Mapping dictionaries for the models above.
    
  93. co_mapping = {
    
  94.     "name": "Name",
    
  95.     # ForeignKey's use another mapping dictionary for the _related_ Model
    
  96.     # (State in this case).
    
  97.     "state": {"name": "State"},
    
  98.     "mpoly": "MULTIPOLYGON",  # Will convert POLYGON features into MULTIPOLYGONS.
    
  99. }
    
  100. 
    
  101. cofeat_mapping = {
    
  102.     "name": "Name",
    
  103.     "poly": "POLYGON",
    
  104. }
    
  105. 
    
  106. city_mapping = {
    
  107.     "name": "Name",
    
  108.     "population": "Population",
    
  109.     "density": "Density",
    
  110.     "dt": "Created",
    
  111.     "point": "POINT",
    
  112. }
    
  113. 
    
  114. inter_mapping = {
    
  115.     "name": "Name",
    
  116.     "length": "Length",
    
  117.     "path": "LINESTRING",
    
  118. }
    
  119. 
    
  120. has_nulls_mapping = {
    
  121.     "geom": "POLYGON",
    
  122.     "uuid": "uuid",
    
  123.     "datetime": "datetime",
    
  124.     "name": "name",
    
  125.     "integer": "integer",
    
  126.     "num": "num",
    
  127.     "boolean": "boolean",
    
  128. }