basic imports / admin working

This commit is contained in:
Sanj 2011-08-19 18:35:24 +05:30
parent c3a86f17e0
commit da67482965
4 changed files with 143 additions and 86 deletions

View File

@ -1,73 +1,20 @@
from django.contrib import admin from django.contrib.gis import admin
from models import * from models import *
class PlaceAdmin(admin.ModelAdmin): class FeatureNamesInline(admin.StackedInline):
pass model = Name
# admin.site.register(Occupation, OccupationAdmin) extra = 3
# admin.site.register(Relation, RelationAdmin)
admin.site.register(Place, PlaceAdmin)
''' class FeatureAdmin(admin.GeoModelAdmin):
#class NicknameInline(admin.StackedInline): search_fields = ['preferred_name']
# model = Nickname list_filter = ('feature_type',)
# extra = 3 inlines = [FeatureNamesInline]
list_per_page = 500
# map_template = 'gis/admin/osm.html'
# default_lon = 72.855211097628413
# default_lat = 19.415775291486027
# default_zoom = 4
# extra_js = ['http://openstreetmap.org/openlayers/OpenStreetMap.js']
#class LinkInlineModelAdmin(admin.InlineModelAdmin): admin.site.register(Feature, FeatureAdmin)
# pass
#class LinkInline(LinkInlineModelAdmin):
# model = Link
# extra = 3
class ProfileInline(admin.StackedInline):
model = Person
extra = 1
class PerformanceAdmin(admin.ModelAdmin):
filter_horizontal = ('links', 'images')
class EventAdmin(admin.ModelAdmin):
filter_horizontal = ('links',)
class ProfileAdmin(admin.ModelAdmin):
filter_horizontal = ('links', 'files', 'images',)
# inlines = [NicknameInline]
# inlines = [LinkInline]
class VenueAdmin(admin.ModelAdmin):
ordering = ('name',)
prepopulated_fields = {'slug': ('name',)}
filter_horizontal = ('links', 'images')
class TheatreGroupAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('name',)}
filter_horizontal = ('links', 'files', 'images')
class ProductionAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('title',)}
filter_horizontal = ('links', 'files', 'images',)
inlines = [ProfileInline]
class ScriptAdmin(admin.ModelAdmin):
filter_horizontal = ('links', 'downloads')
#admin.site.register(Nickname3)
#admin.site.register(Nickname2)
admin.site.register(Performance, PerformanceAdmin)
admin.site.register(Event, EventAdmin)
admin.site.register(Location)
admin.site.register(ProfileProfile)
admin.site.register(ProfileGroup)
admin.site.register(Script, ScriptAdmin)
admin.site.register(Production, ProductionAdmin)
admin.site.register(Image)
admin.site.register(File)
admin.site.register(Link)
admin.site.register(RandomQuote)
admin.site.register(ProfileProduction)
admin.site.register(Nickname)
admin.site.register(TheatreGroup, TheatreGroupAdmin)
admin.site.register(Venue, VenueAdmin)
admin.site.register(Profile, ProfileAdmin)
'''

View File

@ -1,29 +1,45 @@
import csv import csv
from settings import DATA_DIR from settings import DATA_DIR
from os.path import join from os.path import join
from places.models import Place, FeatureCode from places.models import Feature, FeatureType
from django.contrib.gis.geos import Point from django.contrib.gis.geos import Point
def import_gazetteer(): def import_ftypes(f):
f = open(join(DATA_DIR, "gazetteer.txt"))
t = csv.reader(f, delimiter="\t") t = csv.reader(f, delimiter="\t")
for row in t: for row in t:
p = Place() ft = FeatureType()
if Place.objects.filter(url=row[0]).count() > 0: ft.feature_class = row[0]
ft.code = row[1]
ft.name = row[2]
try:
ft.description = row[3]
except:
ft.description = ''
ft.save()
print "saved " + ft.name
def import_gazetteer(f, limit):
t = csv.reader(f, delimiter="\t")
i = 0
for row in t:
ft = Feature()
if Feature.objects.filter(url=row[0]).count() > 0:
print "duplicate row " + row[0] print "duplicate row " + row[0]
else: else:
p.url = row[0] ft.url = row[0]
p.name = row[1] ft.preferred_name = row[1]
try: try:
fcode = FeatureCode.objects.get(pk=row[2]) fcode = FeatureType.objects.get(code=row[2])
except: except:
print row[2] fcode = None
continue
p.fcode = fcode
p.country = row[3]
p.admin1 = row[4]
p.point = Point(float(row[6]), float(row[5]))
p.save()
print "saved " + p.name
ft.feature_type = fcode
ft.geometry = Point(float(row[6]), float(row[5]))
ft.save()
print "saved " + ft.preferred_name
i += 1
if i > limit:
break

View File

@ -3,6 +3,100 @@ from django.contrib.gis.db import models
# Create your models here. # 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.OneToOneField("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
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): class Place(models.Model):
url = models.CharField(max_length=255, primary_key=True, unique=True) url = models.CharField(max_length=255, primary_key=True, unique=True)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
@ -23,6 +117,6 @@ class FeatureCode(models.Model):
def __unicode__(self): def __unicode__(self):
return self.fcode + ": " + self.short_name return self.fcode + ": " + self.short_name
'''

View File

@ -14,7 +14,7 @@ MANAGERS = ADMINS
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'ENGINE': 'django.contrib.gis.db.backends.postgis', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'gazetteer', # Or path to database file if using sqlite3. 'NAME': 'gazzette', # Or path to database file if using sqlite3.
'USER': 'sanj', # Not used with sqlite3. 'USER': 'sanj', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3. 'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.