From 545a7dd50fd92c1990ef7e48c8a741f79b5c8ee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Thu, 25 Aug 2016 13:47:18 +0200 Subject: [PATCH] update models --- src/c3nav/mapdata/migrations/0001_initial.py | 30 +++++++++----- src/c3nav/mapdata/models.py | 42 ++++++++++---------- 2 files changed, 39 insertions(+), 33 deletions(-) diff --git a/src/c3nav/mapdata/migrations/0001_initial.py b/src/c3nav/mapdata/migrations/0001_initial.py index 028a9a10..3cdd9fed 100644 --- a/src/c3nav/mapdata/migrations/0001_initial.py +++ b/src/c3nav/mapdata/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.9 on 2016-08-23 10:10 +# Generated by Django 1.9.9 on 2016-08-25 11:37 from __future__ import unicode_literals from django.db import migrations, models @@ -15,10 +15,21 @@ class Migration(migrations.Migration): ] operations = [ + migrations.CreateModel( + name='Bounds', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('bottom', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='bottom coordinate')), + ('left', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='left coordinate')), + ('top', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='top coordinate')), + ('right', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='right coordinate')), + ], + ), migrations.CreateModel( name='MapLevel', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(help_text='Usually just an integer (e.g. -1, 0, 1, 2)', max_length=50, unique=True, verbose_name='level name')), ], options={ 'abstract': False, @@ -29,7 +40,9 @@ class Migration(migrations.Migration): name='MapPackage', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('extends', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='extended_by', to='mapdata.MapPackage', verbose_name='extends map package')), + ('name', models.CharField(help_text='e.g. de.c3nav.33c3.base', max_length=50, unique=True, verbose_name='package identifier')), + ('map', models.CharField(help_text='e.g. de.c3nav.33c3', max_length=50, verbose_name='map identifier')), + ('bounds', models.OneToOneField(null=True, on_delete=django.db.models.deletion.PROTECT, to='mapdata.Bounds', verbose_name='bounds')), ], options={ 'abstract': False, @@ -45,27 +58,22 @@ class Migration(migrations.Migration): ('master', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='mapdata.MapPackage')), ], options={ - 'managed': True, - 'default_permissions': (), 'db_tablespace': '', 'verbose_name': 'map package Translation', + 'managed': True, 'db_table': 'mapdata_mappackage_translation', + 'default_permissions': (), }, ), migrations.CreateModel( name='MapSource', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('bottom', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='bottom coordinate')), - ('left', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='left coordinate')), - ('top', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='top coordinate')), - ('right', models.DecimalField(decimal_places=2, max_digits=6, verbose_name='right coordinate')), + ('name', models.SlugField(unique=True, verbose_name='source name')), ('image', models.FileField(upload_to='mapsources/', verbose_name='source image')), + ('bounds', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, to='mapdata.Bounds', verbose_name='bounds')), ('package', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='sources', to='mapdata.MapPackage', verbose_name='map package')), ], - options={ - 'abstract': False, - }, ), migrations.AddField( model_name='maplevel', diff --git a/src/c3nav/mapdata/models.py b/src/c3nav/mapdata/models.py index d0747d33..2cb2356f 100644 --- a/src/c3nav/mapdata/models.py +++ b/src/c3nav/mapdata/models.py @@ -4,15 +4,25 @@ from django.utils.translation import ugettext_lazy as _ from parler.models import TranslatedFields, TranslatableModel +class Bounds(models.Model): + bottom = models.DecimalField(_('bottom coordinate'), max_digits=6, decimal_places=2) + left = models.DecimalField(_('left coordinate'), max_digits=6, decimal_places=2) + top = models.DecimalField(_('top coordinate'), max_digits=6, decimal_places=2) + right = models.DecimalField(_('right coordinate'), max_digits=6, decimal_places=2) + + @property + def __iter__(self): + return iter(((self.bottom, self.left), (self.top, self.right))) + + class MapPackage(TranslatableModel): """ A c3nav map package """ - name = models.CharField(_('package identifier'), max_length=50, help_text=_('e.g. de.c3nav.33c3')), - width = models.IntegerField(_('map width'), max_length=50, null=True, help_text='in meters'), - height = models.IntegerField(_('map height'), max_length=50, null=True, help_text='in meters'), - extends = models.ForeignKey('self', on_delete=models.PROTECT, null=True, related_name='extended_by', - verbose_name=_('extends map package')) + name = models.CharField(_('package identifier'), unique=True, max_length=50, + help_text=_('e.g. de.c3nav.33c3.base')) + map = models.CharField(_('map identifier'), max_length=50, help_text=_('e.g. de.c3nav.33c3')) + bounds = models.OneToOneField('Bounds', null=True, on_delete=models.PROTECT, verbose_name=_('bounds')) translations = TranslatedFields( title=models.CharField(_('package title'), max_length=50), @@ -23,30 +33,18 @@ class MapLevel(TranslatableModel): """ A map level (-1, 0, 1, 2…) """ - name = models.CharField(_('level name'), max_length=50, help_text=_('Usually just an integer (e.g. -1, 0, 1, 2)')), + name = models.CharField(_('level name'), max_length=50, unique=True, + help_text=_('Usually just an integer (e.g. -1, 0, 1, 2)')) package = models.ForeignKey('MapPackage', on_delete=models.PROTECT, related_name='levels', verbose_name=_('map package')) -class BoundingBoxModel(models.Model): - bottom = models.DecimalField(_('bottom coordinate'), max_digits=6, decimal_places=2) - left = models.DecimalField(_('left coordinate'), max_digits=6, decimal_places=2) - top = models.DecimalField(_('top coordinate'), max_digits=6, decimal_places=2) - right = models.DecimalField(_('right coordinate'), max_digits=6, decimal_places=2) - - @property - def bounds(self): - return ((self.bottom, self.left), (self.top, self.right)) - - class Meta: - abstract = True - - -class MapSource(BoundingBoxModel): +class MapSource(models.Model): """ A map source, images of levels that can be useful as backgrounds for the map editor """ - name = models.SlugField(_('source name'), max_length=50, unique=True), + name = models.SlugField(_('source name'), max_length=50, unique=True) package = models.ForeignKey('MapPackage', on_delete=models.PROTECT, related_name='sources', verbose_name=_('map package')) image = models.FileField(_('source image'), upload_to='mapsources/') + bounds = models.OneToOneField('Bounds', on_delete=models.PROTECT, verbose_name=_('bounds'))