diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index 14bca3a8c1..bdbddbf614 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -202,17 +202,22 @@ class EventMetaValueForm(forms.ModelForm): class EventUpdateForm(I18nModelForm): - def clean_slug(self): - return self.instance.slug def __init__(self, *args, **kwargs): + self.change_slug = kwargs.pop('change_slug', False) super().__init__(*args, **kwargs) - self.fields['slug'].widget.attrs['readonly'] = 'readonly' + if not self.change_slug: + self.fields['slug'].widget.attrs['readonly'] = 'readonly' self.fields['location'].widget.attrs['rows'] = '3' self.fields['location'].widget.attrs['placeholder'] = _( 'Sample Conference Center\nHeidelberg, Germany' ) + def clean_slug(self): + if self.change_slug: + return self.cleaned_data['slug'] + return self.instance.slug + class Meta: model = Event localized_fields = '__all__' diff --git a/src/pretix/control/forms/organizer.py b/src/pretix/control/forms/organizer.py index a1be50e814..cee791c72a 100644 --- a/src/pretix/control/forms/organizer.py +++ b/src/pretix/control/forms/organizer.py @@ -35,6 +35,7 @@ class OrganizerUpdateForm(OrganizerForm): def __init__(self, *args, **kwargs): self.domain = kwargs.pop('domain', False) + self.change_slug = kwargs.pop('change_slug', False) kwargs.setdefault('initial', {}) self.instance = kwargs['instance'] if self.domain and self.instance: @@ -43,7 +44,8 @@ class OrganizerUpdateForm(OrganizerForm): kwargs['initial'].setdefault('domain', initial_domain.domainname) super().__init__(*args, **kwargs) - self.fields['slug'].widget.attrs['readonly'] = 'readonly' + if not self.change_slug: + self.fields['slug'].widget.attrs['readonly'] = 'readonly' if self.domain: self.fields['domain'] = forms.CharField( max_length=255, @@ -53,6 +55,8 @@ class OrganizerUpdateForm(OrganizerForm): ) def clean_slug(self): + if self.change_slug: + return self.cleaned_data['slug'] return self.instance.slug def save(self, commit=True): diff --git a/src/pretix/control/views/event.py b/src/pretix/control/views/event.py index 50d7636d04..7a4faf0a20 100644 --- a/src/pretix/control/views/event.py +++ b/src/pretix/control/views/event.py @@ -153,6 +153,12 @@ class EventUpdate(EventSettingsViewMixin, EventPermissionRequiredMixin, MetaData 'event': self.object.slug, }) + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + if self.request.user.has_active_staff_session(self.request.session.session_key): + kwargs['change_slug'] = True + return kwargs + def post(self, request, *args, **kwargs): form = self.get_form() if form.is_valid() and self.sform.is_valid() and all([f.is_valid() for f in self.meta_forms]): diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py index c547b78729..2b6690fe36 100644 --- a/src/pretix/control/views/organizer.py +++ b/src/pretix/control/views/organizer.py @@ -225,6 +225,7 @@ class OrganizerUpdate(OrganizerPermissionRequiredMixin, UpdateView): kwargs = super().get_form_kwargs() if self.request.user.has_active_staff_session(self.request.session.session_key): kwargs['domain'] = True + kwargs['change_slug'] = True return kwargs def get_success_url(self) -> str: