remove Obstacle.height and add Obstacle.crop_to_level
This commit is contained in:
parent
7bf673eb58
commit
207b74b445
4 changed files with 46 additions and 13 deletions
|
@ -51,6 +51,13 @@ class MapitemFormMixin(ModelForm):
|
||||||
if not creating:
|
if not creating:
|
||||||
self.initial['level'] = self.instance.level.name
|
self.initial['level'] = self.instance.level.name
|
||||||
|
|
||||||
|
if 'crop_to_level' in self.fields:
|
||||||
|
# set field_name
|
||||||
|
self.fields['crop_to_level'].to_field_name = 'name'
|
||||||
|
if not creating and self.instance.crop_to_level is not None:
|
||||||
|
self.initial['crop_to_level'] = self.instance.crop_to_level.name
|
||||||
|
self.fields['crop_to_level'].queryset = self.fields['crop_to_level'].queryset.order_by('altitude')
|
||||||
|
|
||||||
if 'levels' in self.fields:
|
if 'levels' in self.fields:
|
||||||
# set field_name
|
# set field_name
|
||||||
self.fields['levels'].to_field_name = 'name'
|
self.fields['levels'].to_field_name = 'name'
|
||||||
|
@ -93,7 +100,7 @@ class MapitemFormMixin(ModelForm):
|
||||||
|
|
||||||
def create_editor_form(mapitemtype):
|
def create_editor_form(mapitemtype):
|
||||||
possible_fields = ['name', 'package', 'altitude', 'level', 'intermediate', 'levels', 'geometry',
|
possible_fields = ['name', 'package', 'altitude', 'level', 'intermediate', 'levels', 'geometry',
|
||||||
'height', 'elevator', 'button']
|
'elevator', 'button', 'crop_to_level']
|
||||||
existing_fields = [field for field in possible_fields if hasattr(mapitemtype, field)]
|
existing_fields = [field for field in possible_fields if hasattr(mapitemtype, field)]
|
||||||
|
|
||||||
class EditorForm(MapitemFormMixin, ModelForm):
|
class EditorForm(MapitemFormMixin, ModelForm):
|
||||||
|
|
25
src/c3nav/mapdata/migrations/0011_auto_20161204_1041.py
Normal file
25
src/c3nav/mapdata/migrations/0011_auto_20161204_1041.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.4 on 2016-12-04 10:41
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('mapdata', '0010_auto_20161203_2139'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='obstacle',
|
||||||
|
name='height',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='obstacle',
|
||||||
|
name='crop_to_level',
|
||||||
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='crops_obstacles', to='mapdata.Level', verbose_name='crop to other level'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -184,7 +184,8 @@ class Obstacle(GeometryMapItemWithLevel):
|
||||||
"""
|
"""
|
||||||
An obstacle
|
An obstacle
|
||||||
"""
|
"""
|
||||||
height = models.DecimalField(_('height of the obstacle'), null=True, max_digits=4, decimal_places=2)
|
crop_to_level = models.ForeignKey('mapdata.Level', on_delete=models.CASCADE, null=True,
|
||||||
|
verbose_name=_('crop to other level'), related_name='crops_obstacles')
|
||||||
|
|
||||||
geomtype = 'polygon'
|
geomtype = 'polygon'
|
||||||
|
|
||||||
|
@ -193,26 +194,25 @@ class Obstacle(GeometryMapItemWithLevel):
|
||||||
verbose_name_plural = _('Obstacles')
|
verbose_name_plural = _('Obstacles')
|
||||||
default_related_name = 'obstacles'
|
default_related_name = 'obstacles'
|
||||||
|
|
||||||
def get_geojson_properties(self):
|
|
||||||
result = super().get_geojson_properties()
|
|
||||||
result['height'] = float(self.height)
|
|
||||||
return result
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def fromfile(cls, data, file_path):
|
def fromfile(cls, data, file_path):
|
||||||
kwargs = super().fromfile(data, file_path)
|
kwargs = super().fromfile(data, file_path)
|
||||||
|
|
||||||
if 'height' in data:
|
if 'crop_to_level' in data:
|
||||||
if not isinstance(data['height'], (int, float)):
|
kwargs['crop_to_level'] = data['crop_to_level']
|
||||||
raise ValueError('altitude has to be int or float.')
|
|
||||||
kwargs['height'] = data['height']
|
|
||||||
|
|
||||||
return kwargs
|
return kwargs
|
||||||
|
|
||||||
|
def get_geojson_properties(self):
|
||||||
|
result = super().get_geojson_properties()
|
||||||
|
if self.crop_to_level is not None:
|
||||||
|
result['crop_to_level'] = self.crop_to_level.name
|
||||||
|
return result
|
||||||
|
|
||||||
def tofile(self):
|
def tofile(self):
|
||||||
result = super().tofile()
|
result = super().tofile()
|
||||||
if self.height is not None:
|
if self.crop_to_level is not None:
|
||||||
result['height'] = float(self.height)
|
result['crop_to_level'] = self.crop_to_level.name
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -147,6 +147,7 @@ class ReaderItem:
|
||||||
|
|
||||||
relations = {
|
relations = {
|
||||||
'level': Level,
|
'level': Level,
|
||||||
|
'crop_to_level': Level,
|
||||||
'elevator': Elevator,
|
'elevator': Elevator,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue