# -*- coding: utf-8 -*- from django import forms from django.contrib.redirects.models import Redirect from django.conf import settings from django.contrib.redirects.admin import RedirectAdmin from django.utils.translation import ugettext as _ class RedirectForm(forms.ModelForm): verbose = _(u'Создание/редактирование редиректа') class Meta: model = Redirect fields = ['old_path', 'new_path'] def save(self, commit=True): obj = super(RedirectForm, self).save(commit=False) obj.site_id = settings.SITE_ID if commit: obj.save() return obj class NewUrlForObjectForm(forms.Form): verbose = _(u'Обновление URL и cоздание редиректа') old_url = forms.CharField(label=_(u'Текущая ссылка')) new_url = forms.CharField(label=_(u'Новая ссылка')) def __init__(self, *args, **kwargs): self.instance = kwargs.pop('instance', None) super(NewUrlForObjectForm, self).__init__(*args, **kwargs) @property def exist(self): 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']: raise forms.ValidationError( _(u'Старый и новый URL совпадают.'), code='invalid' ) return self.cleaned_data['new_url'] def save(self): old_path = self.instance.get_permanent_url() self.instance.url = self.cleaned_data['new_url'] 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, }) return self.instance