move source bounds to BoundsMixin
This commit is contained in:
parent
a60a333f42
commit
b7333bba52
2 changed files with 30 additions and 19 deletions
|
@ -1,6 +1,7 @@
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
EDITOR_FORM_MODELS = OrderedDict()
|
EDITOR_FORM_MODELS = OrderedDict()
|
||||||
|
|
||||||
|
@ -38,3 +39,30 @@ class EditorFormMixin(SerializableMixin, models.Model):
|
||||||
@property
|
@property
|
||||||
def title(self):
|
def title(self):
|
||||||
return self._meta.verbose_name+' '+str(self.id)
|
return self._meta.verbose_name+' '+str(self.id)
|
||||||
|
|
||||||
|
|
||||||
|
class BoundsMixin(SerializableMixin, 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)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def max_bounds(cls):
|
||||||
|
result = cls.objects.all().aggregate(models.Min('bottom'), models.Min('left'),
|
||||||
|
models.Max('top'), models.Max('right'))
|
||||||
|
return ((float(result['bottom__min']), float(result['left__min'])),
|
||||||
|
(float(result['top__max']), float(result['right__max'])))
|
||||||
|
|
||||||
|
def _serialize(self, section=True, **kwargs):
|
||||||
|
result = super()._serialize(**kwargs)
|
||||||
|
result['bounds'] = self.bounds
|
||||||
|
return result
|
||||||
|
|
||||||
|
@property
|
||||||
|
def bounds(self):
|
||||||
|
# noinspection PyTypeChecker
|
||||||
|
return (float(self.bottom), float(self.left)), (float(self.top), float(self.right))
|
||||||
|
|
|
@ -1,18 +1,14 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from c3nav.mapdata.models.base import EditorFormMixin
|
from c3nav.mapdata.models.base import BoundsMixin, EditorFormMixin
|
||||||
|
|
||||||
|
|
||||||
class Source(EditorFormMixin, models.Model):
|
class Source(EditorFormMixin, BoundsMixin, models.Model):
|
||||||
"""
|
"""
|
||||||
A map source, images of levels that can be useful as backgrounds for the map editor
|
A map source, images of levels that can be useful as backgrounds for the map editor
|
||||||
"""
|
"""
|
||||||
name = models.SlugField(_('Name'), unique=True, max_length=50)
|
name = models.SlugField(_('Name'), unique=True, max_length=50)
|
||||||
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)
|
|
||||||
image = models.BinaryField(_('image data')) # todo migrate to better storage
|
image = models.BinaryField(_('image data')) # todo migrate to better storage
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -20,20 +16,7 @@ class Source(EditorFormMixin, models.Model):
|
||||||
verbose_name_plural = _('Sources')
|
verbose_name_plural = _('Sources')
|
||||||
default_related_name = 'sources'
|
default_related_name = 'sources'
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def max_bounds(cls):
|
|
||||||
result = cls.objects.all().aggregate(models.Min('bottom'), models.Min('left'),
|
|
||||||
models.Max('top'), models.Max('right'))
|
|
||||||
return ((float(result['bottom__min']), float(result['left__min'])),
|
|
||||||
(float(result['top__max']), float(result['right__max'])))
|
|
||||||
|
|
||||||
def _serialize(self, section=True, **kwargs):
|
def _serialize(self, section=True, **kwargs):
|
||||||
result = super()._serialize(**kwargs)
|
result = super()._serialize(**kwargs)
|
||||||
result['name'] = self.name
|
result['name'] = self.name
|
||||||
result['bounds'] = self.bounds
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@property
|
|
||||||
def bounds(self):
|
|
||||||
# noinspection PyTypeChecker
|
|
||||||
return (float(self.bottom), float(self.left)), (float(self.top), float(self.right))
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue