diff options
Diffstat (limited to 'app/locations/models.py')
-rw-r--r--[-rwxr-xr-x] | app/locations/models.py | 126 |
1 files changed, 47 insertions, 79 deletions
diff --git a/app/locations/models.py b/app/locations/models.py index e088697..ac8ec44 100755..100644 --- a/app/locations/models.py +++ b/app/locations/models.py @@ -1,66 +1,38 @@ -# -*- coding: utf-8 -*- -# models.py - -# All standard Django fields as well as GeoDjango geometry fields and the GeoManager() can be -# imported from django.contrib.gis.db after adding django.contrib.gis to INSTALLED_APPS from django.contrib.gis.db import models from django.contrib.sitemaps import Sitemap -# Used to display html 'help text' links within Admin App from django.utils.safestring import mark_safe + class Region(models.Model): - name = models.CharField(max_length=50, ) + """Model to define arbitrary regions based on where I've been""" + name = models.CharField(max_length=50) slug = models.SlugField() - pub_date = models.DateTimeField('Date published',null=True) + pub_date = models.DateTimeField('Date published', null=True) # GeoDjango specific Polygon Field and GeoManager geometry = models.MultiPolygonField(srid=4326, null=True) - lon = models.FloatField('Longitude',help_text="Longitude of centerpoint",null=True) - lat = models.FloatField('Latitude',help_text="Latitude of centerpoint",null=True) - zoom_level = models.CharField(max_length=2,null=True) + lon = models.FloatField('Longitude', help_text="Longitude of centerpoint", null=True) + lat = models.FloatField('Latitude', help_text="Latitude of centerpoint", null=True) + zoom_level = models.CharField(max_length=2, null=True) # GeoManager, a subclass that adds a rich set of geospatial queryset methods objects = models.GeoManager() - + def get_absolute_url(self): return "/locations/region/%s/" % (self.slug) - - def __unicode__(self): return self.name - -# imported from django.contrib.gis.db -from django.contrib.gis.db import models + def __str__(self): + return self.name -# Used to display html 'help text' links within Admin App -from django.utils.safestring import mark_safe class Country(models.Model): """ - - A geographic model based on the v3 of the simplified world borders multipolygon shapefile - from http://thematicmapping.org/downloads/world_borders.php. - - Field names, Django types, and max_lengths were autogenerated using the ogrinspect utility with hand - edits to add alternative field names and help_text. - - Imported using LayerMapping (requires GDAL) called within the load_data.py script provided - within this sample project. - - All fields match the source dataset, an ESRI format shapefile made up of several related files: - .shp - holds the vector data that is to be stored in the MultiPolygonField field named'geometry'. - .shx - spatial index file for geometries stored in the .shp. - .dbf - database file for holding attribute data (can be opened in excel and open office). - .prj - contains the spatial reference information for the geometries stored in the .shp - - + A geographic model based on the v3 of the simplified world borders multipolygon shapefile from http://thematicmapping.org/downloads/world_borders.php. """ - - # Regular Django fields corresponding to the attributes in the - # world borders shapefile name = models.CharField(max_length=50) area = models.IntegerField(help_text="Area of Country in SQ meters") pop2005 = models.IntegerField('Population 2005') fips = models.CharField('FIPS Code', max_length=2, help_text=mark_safe('<a href="http://www.census.gov/geo/www/fips/fips.html">Federal Information Processing Standard Code</a>')) - iso2 = models.CharField('2 Digit ISO', max_length=2, help_text=mark_safe('<a href="http://www.iso.org/">International Organization for Standardization</a>' )) - iso3 = models.CharField('3 Digit ISO', max_length=3,help_text=mark_safe('<a href="http://www.iso.org/">International Organization for Standardization</a>' )) + iso2 = models.CharField('2 Digit ISO', max_length=2, help_text=mark_safe('<a href="http://www.iso.org/">International Organization for Standardization</a>')) + iso3 = models.CharField('3 Digit ISO', max_length=3, help_text=mark_safe('<a href="http://www.iso.org/">International Organization for Standardization</a>')) un = models.IntegerField('United Nations Code') REGION_CODES = ( (0, 'MISC'), @@ -95,96 +67,92 @@ class Country(models.Model): (154, 'Northern Europe'), (155, 'Western Europe'), ) - region = models.IntegerField('Region Code',choices=REGION_CODES) - subregion = models.IntegerField('Sub-Region Code',choices=SUBREGION_CODES) - lon = models.FloatField('Longitude',help_text="Longitude of centerpoint") - lat = models.FloatField('Latitude',help_text="Latitude of centerpoint") - zoom_level = models.CharField(max_length=2,null=True) + region = models.IntegerField('Region Code', choices=REGION_CODES) + subregion = models.IntegerField('Sub-Region Code', choices=SUBREGION_CODES) + lon = models.FloatField('Longitude', help_text="Longitude of centerpoint") + lat = models.FloatField('Latitude', help_text="Latitude of centerpoint") + zoom_level = models.CharField(max_length=2, null=True) slug = models.SlugField(null=True) visited = models.BooleanField(default=False) lux_region = models.ForeignKey(Region, null=True) - pub_date = models.DateTimeField('Date published',null=True) - # GeoDjango-specific: a geometry field (MultiPolygonField), and - # overriding the default manager with a GeoManager instance. - geometry = models.MultiPolygonField('Country Border',srid=4326) + pub_date = models.DateTimeField('Date published', null=True) + geometry = models.MultiPolygonField('Country Border', srid=4326) objects = models.GeoManager() - - # Returns the string representation of the model. - def __unicode__(self): - return self.name - class Meta: ordering = ['name'] verbose_name_plural = 'Countries' - + + def __str__(self): + return self.name + def get_absolute_url(self): return "/locations/%s/" % (self.slug) - + class State(models.Model): + """Model to hold state boundaries""" name = models.CharField(max_length=250, blank=True, null=True,) country = models.ForeignKey(Country) slug = models.SlugField() code = models.CharField(max_length=2, null=True, blank=True) - pub_date = models.DateTimeField('Date published',null=True) - geometry = models.MultiPolygonField(srid=4326,null=True) + pub_date = models.DateTimeField('Date published', null=True) + geometry = models.MultiPolygonField(srid=4326, null=True) objects = models.GeoManager() - + class Meta: ordering = ['name'] - - class Admin: - pass - - def __unicode__(self): - return "%s" %(self.name) + + def __str__(self): + return "%s" % (self.name) def get_absolute_url(self): return "/locations/%s/%s/" % (self.country.slug, self.slug) + class Location(models.Model): + """Model to hold location shapes as arbitrarily defined by me""" state = models.ForeignKey(State) name = models.CharField(max_length=50, ) slug = models.SlugField() - pub_date = models.DateTimeField('Date published',null=True) + pub_date = models.DateTimeField('Date published', null=True) # GeoDjango specific Polygon Field and GeoManager geometry = models.MultiPolygonField(srid=4326) # GeoManager, a subclass that adds a rich set of geospatial queryset methods objects = models.GeoManager() - + + def __str__(self): + return self.name + def get_absolute_url(self): return "/locations/%s/%s/%s/" % (self.state.country.slug, self.state.slug, self.slug) - - def __unicode__(self): return self.name class Route(models.Model): + """Model to hold routes for longer trips""" name = models.CharField(max_length=200) slug = models.SlugField() zoom = models.CharField(max_length=2, null=True) template_var_name = models.CharField(max_length=10, null=True) - pub_date = models.DateTimeField('Date published',null=True) + pub_date = models.DateTimeField('Date published', null=True) # GeoDjango specific Polygon Field and GeoManager geometry = models.MultiPointField(srid=4326) # GeoManager, a subclass that adds a rich set of geospatial queryset methods objects = models.GeoManager() - + def get_absolute_url(self): return "/locations/%s/%s/%s/" % (self.slug) - - def __unicode__(self): return self.name - + def __str__(self): + return self.name class WritingbyLocationSitemap(Sitemap): changefreq = "weekly" priority = 0.6 - + def location(): - return '/writing/%s/1/' %(self.slug) - + return '/writing/%s' % self.slug + def items(self): return Location.objects.all() - |