|
|
|
@ -1,4 +1,5 @@
@@ -1,4 +1,5 @@
|
|
|
|
|
from django.core.exceptions import ValidationError |
|
|
|
|
from django.core.validators import MaxValueValidator, MinValueValidator |
|
|
|
|
from django.db import models |
|
|
|
|
from django.utils.translation import gettext |
|
|
|
|
from django.utils.translation import gettext_lazy as _ |
|
|
|
@ -8,10 +9,38 @@ from wagtail.core.fields import RichTextField
@@ -8,10 +9,38 @@ from wagtail.core.fields import RichTextField
|
|
|
|
|
from modelcluster.fields import ParentalKey |
|
|
|
|
from modelcluster.models import ClusterableModel |
|
|
|
|
|
|
|
|
|
zoom_validators = [ |
|
|
|
|
MinValueValidator(1), |
|
|
|
|
MaxValueValidator(20), |
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Map(ClusterableModel): |
|
|
|
|
name = models.CharField(verbose_name=_("name"), max_length=30) |
|
|
|
|
|
|
|
|
|
center_latitude = models.DecimalField( |
|
|
|
|
verbose_name=_("center point's latitude"), |
|
|
|
|
max_digits=7, |
|
|
|
|
decimal_places=4, |
|
|
|
|
) |
|
|
|
|
center_longitude = models.DecimalField( |
|
|
|
|
verbose_name=_("center point's longitude"), |
|
|
|
|
max_digits=7, |
|
|
|
|
decimal_places=4, |
|
|
|
|
) |
|
|
|
|
min_zoom = models.PositiveSmallIntegerField( |
|
|
|
|
verbose_name=_("minimum zoom level"), |
|
|
|
|
blank=True, |
|
|
|
|
null=True, |
|
|
|
|
validators=zoom_validators, |
|
|
|
|
) |
|
|
|
|
max_zoom = models.PositiveSmallIntegerField( |
|
|
|
|
verbose_name=_("maximum zoom level"), |
|
|
|
|
blank=True, |
|
|
|
|
null=True, |
|
|
|
|
validators=zoom_validators, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
verbose_name = _("map") |
|
|
|
|
verbose_name_plural = _("maps") |
|
|
|
@ -19,6 +48,11 @@ class Map(ClusterableModel):
@@ -19,6 +48,11 @@ class Map(ClusterableModel):
|
|
|
|
|
def __str__(self): |
|
|
|
|
return self.name |
|
|
|
|
|
|
|
|
|
def clean(self): |
|
|
|
|
if self.min_zoom and self.max_zoom and self.min_zoom > self.max_zoom: |
|
|
|
|
msg = gettext("Minimum zoom level must be smaller than maximum.") |
|
|
|
|
raise ValidationError({'min_zoom': msg, 'max_zoom': msg}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Point(models.Model): |
|
|
|
|
title = models.CharField(verbose_name=_("title"), max_length=50) |
|
|
|
|