validate location slug

This commit is contained in:
Laura Klünder 2018-12-23 18:13:37 +01:00
parent 4cc8341140
commit c621b02678

View file

@ -2,6 +2,7 @@ from collections import OrderedDict
from contextlib import suppress from contextlib import suppress
from operator import attrgetter from operator import attrgetter
from django.core.validators import RegexValidator
from django.db import models from django.db import models
from django.db.models import Prefetch from django.db.models import Prefetch
from django.urls import reverse from django.urls import reverse
@ -34,6 +35,15 @@ class LocationSlugManager(models.Manager):
return qs return qs
validate_slug = RegexValidator(
r'^[a-z0-9]+(-[a-z0-9]+)*\Z',
# Translators: "letters" means latin letters: a-z and A-Z.
_('Enter a valid location slug consisting of lowercase letters, numbers or hyphens, '
'not starting or ending with hyphens or containing consecutive hyphens.'),
'invalid'
)
class LocationSlug(SerializableMixin, models.Model): class LocationSlug(SerializableMixin, models.Model):
LOCATION_TYPE_CODES = { LOCATION_TYPE_CODES = {
'Level': 'l', 'Level': 'l',
@ -43,7 +53,7 @@ class LocationSlug(SerializableMixin, models.Model):
'LocationGroup': 'g' 'LocationGroup': 'g'
} }
LOCATION_TYPE_BY_CODE = {code: model_name for model_name, code in LOCATION_TYPE_CODES.items()} LOCATION_TYPE_BY_CODE = {code: model_name for model_name, code in LOCATION_TYPE_CODES.items()}
slug = models.SlugField(_('Slug'), unique=True, null=True, blank=True, max_length=50) slug = models.SlugField(_('Slug'), unique=True, null=True, blank=True, max_length=50, validators=[validate_slug])
objects = LocationSlugManager() objects = LocationSlugManager()