create LocationGroupCategory

This commit is contained in:
Laura Klünder 2017-07-10 13:54:33 +02:00
parent 52c64b0798
commit 4a58c1afab
4 changed files with 86 additions and 4 deletions

View file

@ -9,8 +9,8 @@ from rest_framework.routers import SimpleRouter
from c3nav.editor.api import ChangeSetViewSet, EditorViewSet
from c3nav.mapdata.api import (AreaViewSet, BuildingViewSet, ColumnViewSet, DoorViewSet, HoleViewSet, LevelViewSet,
LineObstacleViewSet, LocationGroupViewSet, LocationViewSet, ObstacleViewSet, POIViewSet,
SourceViewSet, SpaceViewSet, StairViewSet)
LineObstacleViewSet, LocationGroupCategoryViewSet, LocationGroupViewSet, LocationViewSet,
ObstacleViewSet, POIViewSet, SourceViewSet, SpaceViewSet, StairViewSet)
router = SimpleRouter()
router.register(r'levels', LevelViewSet)
@ -27,6 +27,7 @@ router.register(r'pois', POIViewSet)
router.register(r'sources', SourceViewSet)
router.register(r'locations', LocationViewSet)
router.register(r'locationgroupcategories', LocationGroupCategoryViewSet)
router.register(r'locationgroups', LocationGroupViewSet)
router.register(r'editor', EditorViewSet, base_name='editor')

View file

@ -16,7 +16,8 @@ from c3nav.mapdata.models import Building, Door, Hole, LocationGroup, Source, Sp
from c3nav.mapdata.models.geometry.level import LevelGeometryMixin
from c3nav.mapdata.models.geometry.space import POI, Area, Column, LineObstacle, Obstacle, SpaceGeometryMixin, Stair
from c3nav.mapdata.models.level import Level
from c3nav.mapdata.models.locations import Location, LocationRedirect, LocationSlug, SpecificLocation
from c3nav.mapdata.models.locations import (Location, LocationGroupCategory, LocationRedirect, LocationSlug,
SpecificLocation)
from c3nav.mapdata.utils.models import get_submodels
@ -138,6 +139,10 @@ class POIViewSet(MapdataViewSet):
queryset = POI.objects.all()
class LocationGroupCategoryViewSet(MapdataViewSet):
queryset = LocationGroupCategory.objects.all()
class LocationGroupViewSet(MapdataViewSet):
queryset = LocationGroup.objects.all()

View file

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.2 on 2017-07-10 11:39
from __future__ import unicode_literals
import c3nav.mapdata.fields
from django.db import migrations, models
import django.db.models.deletion
def create_location_group_category(apps, schema_editor):
LocationGroupCategory = apps.get_model('mapdata', 'LocationGroupCategory')
category = LocationGroupCategory.objects.create(name='groups', titles={
'en': 'Location Groups',
'de': 'Ortgruppen',
})
LocationGroup = apps.get_model('mapdata', 'LocationGroup')
LocationGroup.objects.update(category=category)
class Migration(migrations.Migration):
dependencies = [
('mapdata', '0018_auto_20170708_1752'),
]
operations = [
migrations.CreateModel(
name='LocationGroupCategory',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('titles', c3nav.mapdata.fields.JSONField(default={})),
('name', models.SlugField(unique=True, verbose_name='Name')),
],
options={
'verbose_name': 'Location Group Category',
'verbose_name_plural': 'Location Group Categories',
'default_related_name': 'locationgroupcategories',
},
),
migrations.AlterModelOptions(
name='locationslug',
options={'verbose_name': 'Location with Slug', 'verbose_name_plural': 'Location with Slug'},
),
migrations.AddField(
model_name='locationgroup',
name='category',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='groups', to='mapdata.LocationGroupCategory', verbose_name='Location Group Category'),
),
migrations.RunPython(create_location_group_category, lambda: None),
migrations.AlterField(
model_name='locationgroup',
name='category',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='groups',
to='mapdata.LocationGroupCategory', verbose_name='Location Group Category'),
),
]

View file

@ -148,7 +148,25 @@ class SpecificLocation(Location, models.Model):
return result
class LocationGroupCategory(TitledMixin, models.Model):
name = models.SlugField(_('Name'), unique=True, max_length=50)
class Meta:
verbose_name = _('Location Group Category')
verbose_name_plural = _('Location Group Categories')
default_related_name = 'locationgroupcategories'
def _serialize(self, **kwargs):
result = super()._serialize(**kwargs)
result['name'] = self.name
result.move_to_end('name', last=False)
result.move_to_end('id', last=False)
return result
class LocationGroup(Location, models.Model):
category = models.ForeignKey(LocationGroupCategory, related_name='groups', on_delete=models.PROTECT,
verbose_name=_('Location Group Category'))
compiled_room = models.BooleanField(default=False, verbose_name=_('is a compiled room'))
compiled_area = models.BooleanField(default=False, verbose_name=_('is a compiled area'))
@ -159,6 +177,7 @@ class LocationGroup(Location, models.Model):
def _serialize(self, **kwargs):
result = super()._serialize(**kwargs)
result['category'] = self.category_id
result['compiled_room'] = self.compiled_room
result['compiled_area'] = self.compiled_area
return result
@ -182,7 +201,8 @@ class LocationGroup(Location, models.Model):
class LocationRedirect(LocationSlug):
target = models.ForeignKey(LocationSlug, verbose_name=_('target'), related_name='redirects')
target = models.ForeignKey(LocationSlug, related_name='redirects', on_delete=models.CASCADE,
verbose_name=_('target'))
def _serialize(self, with_type=True, **kwargs):
result = super()._serialize(with_type=with_type, **kwargs)