From a845f23ceef9d69ccb535ed26b62377a6261eaa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 9 May 2017 12:50:32 +0200 Subject: [PATCH] convert the model mixins to abstract models --- src/c3nav/mapdata/models/base.py | 6 +++++- src/c3nav/mapdata/models/geometry/base.py | 3 +++ src/c3nav/mapdata/models/geometry/section.py | 10 +++++----- src/c3nav/mapdata/models/geometry/space.py | 9 +++++---- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/c3nav/mapdata/models/base.py b/src/c3nav/mapdata/models/base.py index e493f6da..c819fe88 100644 --- a/src/c3nav/mapdata/models/base.py +++ b/src/c3nav/mapdata/models/base.py @@ -1,13 +1,17 @@ from collections import OrderedDict +from django.db import models from django.utils.translation import get_language EDITOR_FORM_MODELS = OrderedDict() -class EditorFormMixin: +class EditorFormMixin(models.Model): EditorForm = None + class Meta: + abstract = True + @property def title(self): if not hasattr(self, 'titles'): diff --git a/src/c3nav/mapdata/models/geometry/base.py b/src/c3nav/mapdata/models/geometry/base.py index 061f843e..1ebdb181 100644 --- a/src/c3nav/mapdata/models/geometry/base.py +++ b/src/c3nav/mapdata/models/geometry/base.py @@ -2,6 +2,7 @@ from collections import OrderedDict from shapely.geometry import Point, mapping +from c3nav.mapdata.fields import GeometryField from c3nav.mapdata.models.base import EditorFormMixin from c3nav.mapdata.utils.json import format_geojson @@ -12,6 +13,8 @@ class GeometryMixin(EditorFormMixin): """ A map feature with a geometry """ + geometry = None + class Meta: abstract = True diff --git a/src/c3nav/mapdata/models/geometry/section.py b/src/c3nav/mapdata/models/geometry/section.py index cc25d14b..b91f7b3f 100644 --- a/src/c3nav/mapdata/models/geometry/section.py +++ b/src/c3nav/mapdata/models/geometry/section.py @@ -10,6 +10,11 @@ SECTION_MODELS = OrderedDict() class SectionGeometryMixin(GeometryMixin): + section = models.ForeignKey('mapdata.Section', on_delete=models.CASCADE, verbose_name=_('section')) + + class Meta: + abstract = True + def get_geojson_properties(self): result = super().get_geojson_properties() result['section'] = self.section.id @@ -20,7 +25,6 @@ class Building(SectionGeometryMixin, models.Model): """ The outline of a building on a specific level """ - section = models.ForeignKey('mapdata.Section', on_delete=models.CASCADE, verbose_name=_('section')) geometry = GeometryField('polygon') class Meta: @@ -45,8 +49,6 @@ class Space(SectionGeometryMixin, models.Model): ('upper', _('upper')), ('lowerr', _('lower')), ) - - section = models.ForeignKey('mapdata.Section', on_delete=models.CASCADE, verbose_name=_('section')) geometry = GeometryField('polygon') public = models.BooleanField(verbose_name=_('public'), default=True) category = models.CharField(verbose_name=_('category'), choices=CATEGORIES, max_length=16) @@ -69,7 +71,6 @@ class Door(SectionGeometryMixin, models.Model): """ A connection between two rooms """ - section = models.ForeignKey('mapdata.Section', on_delete=models.CASCADE, verbose_name=_('section')) geometry = GeometryField('polygon') class Meta: @@ -82,7 +83,6 @@ class Hole(SectionGeometryMixin, models.Model): """ A hole in the ground of a room, e.g. for stairs. """ - section = models.ForeignKey('mapdata.Section', on_delete=models.CASCADE, verbose_name=_('section')) geometry = GeometryField('polygon') class Meta: diff --git a/src/c3nav/mapdata/models/geometry/space.py b/src/c3nav/mapdata/models/geometry/space.py index e300ab32..61bf3b6d 100644 --- a/src/c3nav/mapdata/models/geometry/space.py +++ b/src/c3nav/mapdata/models/geometry/space.py @@ -12,6 +12,11 @@ SPACE_MODELS = OrderedDict() class SpaceGeometryMixin(GeometryMixin): + space = models.ForeignKey('mapdata.Space', on_delete=models.CASCADE, verbose_name=_('space')) + + class Meta: + abstract = True + def get_geojson_properties(self): result = super().get_geojson_properties() result['space'] = self.space.id @@ -22,7 +27,6 @@ class StuffedArea(SpaceGeometryMixin, models.Model): """ A slow area with many tables or similar. Avoid it from routing by slowing it a bit down """ - space = models.ForeignKey('mapdata.Space', on_delete=models.CASCADE, verbose_name=_('space')) geometry = GeometryField('polygon') class Meta: @@ -35,7 +39,6 @@ class Stair(SpaceGeometryMixin, models.Model): """ A stair """ - space = models.ForeignKey('mapdata.Space', on_delete=models.CASCADE, verbose_name=_('space')) geometry = GeometryField('polyline') class Meta: @@ -70,7 +73,6 @@ class Obstacle(SpaceGeometryMixin, models.Model): """ An obstacle """ - space = models.ForeignKey('mapdata.Space', on_delete=models.CASCADE, verbose_name=_('space')) geometry = GeometryField('polygon') class Meta: @@ -83,7 +85,6 @@ class LineObstacle(SpaceGeometryMixin, models.Model): """ An obstacle that is a line with a specific width """ - space = models.ForeignKey('mapdata.Space', on_delete=models.CASCADE, verbose_name=_('space')) geometry = GeometryField('polyline') width = models.DecimalField(_('obstacle width'), max_digits=4, decimal_places=2, default=0.15)