class EventCreate(OrganizerPermissionRequiredMixin, CreateView): model = Event form_class = EventCreateForm template_name = 'pretixcontrol/events/create.html' context_object_name = 'event' permission = 'can_create_events' @cached_property def sform(self): return EventCreateSettingsForm( obj=Event(), prefix='settings', data=self.request.POST if self.request.method == 'POST' else None ) def post(self, request, *args, **kwargs): form = self.get_form() if form.is_valid() and self.sform.is_valid(): return self.form_valid(form) else: return self.form_invalid(form) def get_context_data(self, *args, **kwargs) -> dict: context = super().get_context_data(*args, **kwargs) context['sform'] = self.sform return context def dispatch(self, request, *args, **kwargs): self.object = Event() return super().dispatch(request, *args, **kwargs) def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs['organizer'] = self.request.organizer return kwargs @transaction.atomic def form_valid(self, form): messages.success(self.request, _('The new event has been created.')) form.instance.organizer = self.request.organizer ret = super().form_valid(form) EventPermission.objects.create( event=form.instance, user=self.request.user, ) self.object = form.instance self.object.plugins = settings.PRETIX_PLUGINS_DEFAULT self.object.save() self.sform.obj = form.instance self.sform.save() form.instance.log_action('pretix.event.settings', user=self.request.user, data={ k: form.instance.settings.get(k) for k in self.sform.changed_data }) return ret def get_success_url(self) -> str: return reverse('control:event.settings', kwargs={ 'organizer': self.request.organizer.slug, 'event': self.object.slug, })
def test_slug_validation(self): event = Event(organizer=self.orga, name='download', slug='download', date_from=datetime.datetime( 2013, 12, 26, tzinfo=datetime.timezone.utc), live=True) with self.assertRaises(ValidationError): if event.full_clean(): event.save() self.assertEqual(Event.objects.filter(name='download').count(), 0)
def test_slug_validation(self): event = Event( organizer=self.orga, name='download', slug='download', date_from=datetime.datetime(2013, 12, 26, tzinfo=datetime.timezone.utc), live=True ) with self.assertRaises(ValidationError): if event.full_clean(): event.save() self.assertEqual(Event.objects.filter(name='download').count(), 0)