From 07c6c113738d57e0476ff6edbc9102a85eae0d72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 18 Jun 2017 05:14:02 +0200 Subject: [PATCH] redirectslug unique check and QuerySetWrapper.delete() --- src/c3nav/editor/forms.py | 3 +-- src/c3nav/editor/wrappers.py | 10 +++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/c3nav/editor/forms.py b/src/c3nav/editor/forms.py index 1c84a2d5..f269c8f5 100644 --- a/src/c3nav/editor/forms.py +++ b/src/c3nav/editor/forms.py @@ -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 diff --git a/src/c3nav/editor/wrappers.py b/src/c3nav/editor/wrappers.py index 831bca33..9d5c1af7 100644 --- a/src/c3nav/editor/wrappers.py +++ b/src/c3nav/editor/wrappers.py @@ -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):