141 lines
4 KiB
Python
141 lines
4 KiB
Python
from django.db import models
|
|
from django.contrib.gis.db import models
|
|
|
|
# Create your models here.
|
|
|
|
class AuthorityRecord(models.Model):
|
|
uri = models.CharField(max_length=512)
|
|
preferred_name = models.CharField(max_length=255)
|
|
features = models.ManyToManyField("Feature", blank=True)
|
|
|
|
def __unicode__(self):
|
|
return self.preferred_name
|
|
|
|
|
|
class Feature(models.Model):
|
|
url = models.CharField(max_length=512, unique=True)
|
|
preferred_name = models.CharField(max_length=512)
|
|
feature_type = models.ForeignKey("FeatureType", null=True, blank=True)
|
|
geometry = models.GeometryField()
|
|
is_primary = models.BooleanField(default=True)
|
|
time_frame = models.ForeignKey("TimeFrame", null=True, blank=True)
|
|
relationships = models.ManyToManyField("Feature", through='Relationship', blank=True)
|
|
objects = models.GeoManager()
|
|
|
|
class Meta:
|
|
ordering = ['preferred_name']
|
|
|
|
def __unicode__(self):
|
|
return self.preferred_name
|
|
|
|
def feature_type_name(self):
|
|
return "%s: %s" % (self.feature_type.code, self.feature_type.name,)
|
|
feature_type_name.description = "Feature Type"
|
|
|
|
def time_start(self):
|
|
tf = self.time_frame
|
|
if tf is not None:
|
|
return str(tf.start_date)
|
|
else:
|
|
return ''
|
|
time_start.description = "Start Date"
|
|
|
|
def time_end(self):
|
|
tf = self.time_frame
|
|
if tf is not None:
|
|
return str(tf.end_sate)
|
|
else:
|
|
return ''
|
|
time_end.description = "End Date"
|
|
|
|
|
|
LANGUAGE_CHOICES = (
|
|
('en', 'English'),
|
|
('es', 'Spanish'),
|
|
)
|
|
|
|
NAME_TYPE_CHOICES = (
|
|
('official', 'official'),
|
|
('historic', 'historic'),
|
|
('colloquial', 'colloquial'),
|
|
('-blank-', '-blank-'),
|
|
)
|
|
|
|
class Name(models.Model):
|
|
feature = models.ForeignKey(Feature)
|
|
text = models.CharField(max_length=512)
|
|
language = models.CharField(max_length=2, choices=LANGUAGE_CHOICES)
|
|
name_type = models.CharField(max_length=64, choices=NAME_TYPE_CHOICES)
|
|
|
|
def __unicode__(self):
|
|
return self.text
|
|
|
|
GRANULARITY_CHOICES = (
|
|
('day', 'day'),
|
|
('month', 'month'),
|
|
('year', 'year'),
|
|
('decade', 'decade'),
|
|
('century', 'century'),
|
|
)
|
|
|
|
class TimeFrame(models.Model):
|
|
description = models.TextField(blank=True)
|
|
start_date = models.DateField()
|
|
end_date = models.DateField() #add default to now
|
|
start_granularity = models.CharField(max_length=64, choices=GRANULARITY_CHOICES)
|
|
end_granularity = models.CharField(max_length=64, choices=GRANULARITY_CHOICES)
|
|
|
|
def __unicode__(self):
|
|
return self.description
|
|
|
|
|
|
class FeatureType(models.Model):
|
|
feature_class = models.CharField(max_length=1)
|
|
code = models.CharField(max_length=5, unique=True)
|
|
name = models.CharField(max_length=128)
|
|
description = models.TextField()
|
|
|
|
class Meta:
|
|
ordering = ['code']
|
|
|
|
def __unicode__(self):
|
|
return self.code + ": " + self.name
|
|
|
|
|
|
RELATIONSHIP_CHOICES = (
|
|
('conflates', 'conflates'),
|
|
('contains', 'contains'),
|
|
('subsumes', 'subsumes'),
|
|
('supersedes', 'supersedes'),
|
|
)
|
|
|
|
class Relationship(models.Model):
|
|
feature1 = models.ForeignKey(Feature, related_name="feauture_from")
|
|
feature2 = models.ForeignKey(Feature, related_name="feature_to")
|
|
relationship_type = models.CharField(max_length=64, choices=RELATIONSHIP_CHOICES)
|
|
|
|
|
|
'''
|
|
class Place(models.Model):
|
|
url = models.CharField(max_length=255, primary_key=True, unique=True)
|
|
name = models.CharField(max_length=255)
|
|
fcode = models.ForeignKey("FeatureCode")
|
|
country = models.CharField(max_length=2)
|
|
admin1 = models.CharField(max_length=2)
|
|
point = models.PointField()
|
|
|
|
def __unicode__(self):
|
|
return self.name
|
|
|
|
|
|
class FeatureCode(models.Model):
|
|
fcode = models.CharField(max_length=10, primary_key=True, unique=True)
|
|
letter = models.CharField(max_length=2)
|
|
short_name = models.CharField(max_length=100)
|
|
description = models.TextField()
|
|
|
|
def __unicode__(self):
|
|
return self.fcode + ": " + self.short_name
|
|
'''
|
|
|
|
|