redirectslug unique check and QuerySetWrapper.delete()

This commit is contained in:
Laura Klünder 2017-06-18 05:14:02 +02:00
parent bc1b96e43f
commit 07c6c11373
2 changed files with 10 additions and 3 deletions

View file

@ -7,8 +7,6 @@ from django.forms.widgets import HiddenInput
from django.utils.translation import ugettext_lazy as _
from shapely.geometry.geo import mapping
from c3nav.mapdata.models.locations import LocationSlug
class MapitemFormMixin(ModelForm):
def __init__(self, *args, request=None, **kwargs):
@ -73,6 +71,7 @@ class MapitemFormMixin(ModelForm):
for slug in self.add_redirect_slugs:
self.fields['slug'].run_validators(slug)
LocationSlug = self.request.changeset.wrap('LocationSlug')
for slug in LocationSlug.objects.filter(slug__in=self.add_redirect_slugs).values_list('slug', flat=True)[:1]:
raise ValidationError(
_('Can not add redirecting slug “%s”: it is already used elsewhere.') % slug

View file

@ -98,7 +98,7 @@ class ModelWrapper(BaseWrapper):
@classmethod
def get_submodels(cls, model):
try:
return cls._submodels_by_model[cls._obj]
return cls._submodels_by_model[model]
except:
pass
all_models = model.__subclasses__()
@ -529,6 +529,9 @@ class BaseQueryWrapper(BaseWrapper):
if segments:
raise NotImplementedError
if filter_type == 'in':
return self._filter_values(q, field_name, lambda val: val in filter_value)
if filter_type == 'lt':
return self._filter_values(q, field_name, lambda val: val < filter_value)
@ -682,6 +685,11 @@ class BaseQueryWrapper(BaseWrapper):
obj.save()
return obj
@get_queryset
def delete(self):
for obj in self:
obj.delete()
class ManagerWrapper(BaseQueryWrapper):
def get_queryset(self):