diff --git a/exposition/management/commands/check_url.py b/exposition/management/commands/check_url.py index 0c6b6db4..fac4cb2c 100644 --- a/exposition/management/commands/check_url.py +++ b/exposition/management/commands/check_url.py @@ -24,11 +24,13 @@ class Command(NoArgsCommand): while slice_offset <= objects_max: print('runnig for {start}:{end}'.format(start=slice_offset, end=slice_offset + self.objects_per_cycle)) for event in qs[slice_offset:slice_offset + self.objects_per_cycle]: - if event.url != translit_with_separator(event.name.strip().lower()): + name = event.name.strip().lower() + if (name and event.url != translit_with_separator(name)) or not name: object_ids.append(event.pk) - elif event.bad_url: + elif name and event.bad_url: event.bad_url = False event.save() + slice_offset = slice_offset + self.objects_per_cycle print('objects found {count}'.format(count=len(object_ids))) if object_ids: diff --git a/redirects/forms.py b/redirects/forms.py index 6f353375..74ed9f71 100644 --- a/redirects/forms.py +++ b/redirects/forms.py @@ -23,6 +23,7 @@ class RedirectForm(forms.ModelForm): class NewUrlForObjectForm(forms.Form): verbose = _(u'Обновление URL и cоздание редиректа') + detach = forms.BooleanField(label=_(u'Ссылка в порядке'), required=False, help_text=_(u'Если отмечено, никаких изменений с ссылкой события не будет, флаг о подозрении на неправильную ссылку будет снят.')) old_url = forms.CharField(label=_(u'Текущая ссылка')) new_url = forms.CharField(label=_(u'Новая ссылка')) @@ -35,7 +36,7 @@ class NewUrlForObjectForm(forms.Form): return Redirect.objects.filter(old_path=self.instance.get_permanent_url()).exists() def clean_new_url(self): - if self.cleaned_data['new_url'] == self.cleaned_data['old_url']: + if not self.cleaned_data['detach'] and self.cleaned_data['new_url'] == self.cleaned_data['old_url']: raise forms.ValidationError( _(u'Старый и новый URL совпадают.'), code='invalid' @@ -43,7 +44,7 @@ class NewUrlForObjectForm(forms.Form): return self.cleaned_data['new_url'] def clean(self): - if self.cleaned_data.get('new_url', None): + if not self.cleaned_data['detach'] and self.cleaned_data.get('new_url', None): if self.instance.__class__.objects.filter(url=self.cleaned_data['new_url']).exclude(pk=self.instance.pk).exists(): raise forms.ValidationError( _(u'Объект с таким URL уже существует'), @@ -51,15 +52,19 @@ class NewUrlForObjectForm(forms.Form): return self.cleaned_data def save(self): - old_path = self.instance.get_permanent_url() - self.instance.url = self.cleaned_data['new_url'] - self.instance.bad_url = False - self.instance.save() - obj, created = Redirect.objects.get_or_create( - old_path=old_path, - defaults={ - 'new_path': self.instance.get_permanent_url(), - 'site_id': settings.SITE_ID, - }) + if not self.cleaned_data['detach']: + old_path = self.instance.get_permanent_url() + self.instance.url = self.cleaned_data['new_url'] + self.instance.bad_url = False + self.instance.save() + obj, created = Redirect.objects.get_or_create( + old_path=old_path, + defaults={ + 'new_path': self.instance.get_permanent_url(), + 'site_id': settings.SITE_ID, + }) + else: + self.instance.bad_url = False + self.instance.save() return self.instance diff --git a/templates/admin/redirects/newurlforobject.html b/templates/admin/redirects/newurlforobject.html index 15748614..16e1db78 100644 --- a/templates/admin/redirects/newurlforobject.html +++ b/templates/admin/redirects/newurlforobject.html @@ -18,6 +18,11 @@