mirror of
				https://github.com/django/django.git
				synced 2025-10-30 17:16:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			129 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from django.contrib.gis.db import models
 | |
| 
 | |
| 
 | |
| class NamedModel(models.Model):
 | |
|     name = models.CharField(max_length=25)
 | |
| 
 | |
|     class Meta:
 | |
|         abstract = True
 | |
| 
 | |
|     def __str__(self):
 | |
|         return self.name
 | |
| 
 | |
| 
 | |
| class State(NamedModel):
 | |
|     pass
 | |
| 
 | |
| 
 | |
| class County(NamedModel):
 | |
|     state = models.ForeignKey(State, models.CASCADE)
 | |
|     mpoly = models.MultiPolygonField(srid=4269, null=True)  # Multipolygon in NAD83
 | |
| 
 | |
| 
 | |
| class CountyFeat(NamedModel):
 | |
|     poly = models.PolygonField(srid=4269)
 | |
| 
 | |
| 
 | |
| class City(NamedModel):
 | |
|     name_txt = models.TextField(default="")
 | |
|     name_short = models.CharField(max_length=5)
 | |
|     population = models.IntegerField()
 | |
|     density = models.DecimalField(max_digits=7, decimal_places=1)
 | |
|     dt = models.DateField()
 | |
|     point = models.PointField()
 | |
| 
 | |
|     class Meta:
 | |
|         app_label = "layermap"
 | |
| 
 | |
| 
 | |
| class Interstate(NamedModel):
 | |
|     length = models.DecimalField(max_digits=6, decimal_places=2)
 | |
|     path = models.LineStringField()
 | |
| 
 | |
|     class Meta:
 | |
|         app_label = "layermap"
 | |
| 
 | |
| 
 | |
| # Same as `City` above, but for testing model inheritance.
 | |
| class CityBase(NamedModel):
 | |
|     population = models.IntegerField()
 | |
|     density = models.DecimalField(max_digits=7, decimal_places=1)
 | |
|     point = models.PointField()
 | |
| 
 | |
| 
 | |
| class ICity1(CityBase):
 | |
|     dt = models.DateField()
 | |
| 
 | |
|     class Meta(CityBase.Meta):
 | |
|         pass
 | |
| 
 | |
| 
 | |
| class ICity2(ICity1):
 | |
|     dt_time = models.DateTimeField(auto_now=True)
 | |
| 
 | |
|     class Meta(ICity1.Meta):
 | |
|         pass
 | |
| 
 | |
| 
 | |
| class Invalid(models.Model):
 | |
|     point = models.PointField()
 | |
| 
 | |
| 
 | |
| class HasNulls(models.Model):
 | |
|     uuid = models.UUIDField(primary_key=True, editable=False)
 | |
|     geom = models.PolygonField(srid=4326, blank=True, null=True)
 | |
|     datetime = models.DateTimeField(blank=True, null=True)
 | |
|     integer = models.IntegerField(blank=True, null=True)
 | |
|     num = models.FloatField(blank=True, null=True)
 | |
|     boolean = models.BooleanField(blank=True, null=True)
 | |
|     name = models.CharField(blank=True, null=True, max_length=20)
 | |
| 
 | |
| 
 | |
| class DoesNotAllowNulls(models.Model):
 | |
|     uuid = models.UUIDField(primary_key=True, editable=False)
 | |
|     geom = models.PolygonField(srid=4326)
 | |
|     datetime = models.DateTimeField()
 | |
|     integer = models.IntegerField()
 | |
|     num = models.FloatField()
 | |
|     boolean = models.BooleanField()
 | |
|     name = models.CharField(max_length=20)
 | |
| 
 | |
| 
 | |
| # Mapping dictionaries for the models above.
 | |
| co_mapping = {
 | |
|     "name": "Name",
 | |
|     # ForeignKey's use another mapping dictionary for the _related_ Model
 | |
|     # (State in this case).
 | |
|     "state": {"name": "State"},
 | |
|     "mpoly": "MULTIPOLYGON",  # Will convert POLYGON features into MULTIPOLYGONS.
 | |
| }
 | |
| 
 | |
| cofeat_mapping = {
 | |
|     "name": "Name",
 | |
|     "poly": "POLYGON",
 | |
| }
 | |
| 
 | |
| city_mapping = {
 | |
|     "name": "Name",
 | |
|     "population": "Population",
 | |
|     "density": "Density",
 | |
|     "dt": "Created",
 | |
|     "point": "POINT",
 | |
| }
 | |
| 
 | |
| inter_mapping = {
 | |
|     "name": "Name",
 | |
|     "length": "Length",
 | |
|     "path": "LINESTRING",
 | |
| }
 | |
| 
 | |
| has_nulls_mapping = {
 | |
|     "geom": "POLYGON",
 | |
|     "uuid": "uuid",
 | |
|     "datetime": "datetime",
 | |
|     "name": "name",
 | |
|     "integer": "integer",
 | |
|     "num": "num",
 | |
|     "boolean": "boolean",
 | |
| }
 |