You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

70 lines
2.8 KiB

# -*- 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оздание редиректа')
detach = forms.BooleanField(label=_(u'Ссылка в порядке'), required=False, help_text=_(u'Если отмечено, никаких изменений с ссылкой события не будет, флаг о подозрении на неправильную ссылку будет снят.'))
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 not self.cleaned_data['detach'] and self.cleaned_data['new_url'] == self.cleaned_data['old_url']:
raise forms.ValidationError(
_(u'Старый и новый URL совпадают.'),
code='invalid'
)
return self.cleaned_data['new_url']
def clean(self):
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 уже существует'),
)
return self.cleaned_data
def save(self):
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