@ -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