# Keep all imports and previous classes up to RideCreateView class RideUpdateView(LoginRequiredMixin, ParkContextRequired, EditSubmissionMixin, UpdateView): """View for updating an existing ride""" model = Ride form_class = RideForm template_name = 'rides/ride_form.html' slug_url_kwarg = 'ride_slug' def get_success_url(self): """Get URL to redirect to after successful update""" return reverse('parks:rides:ride_detail', kwargs={ 'park_slug': self.park.slug, 'ride_slug': self.object.slug }) def get_queryset(self): """Get ride for the specific park""" return Ride.objects.filter(park__slug=self.kwargs['park_slug']) def get_form_kwargs(self): """Pass park to the form""" kwargs = super().get_form_kwargs() self.park = get_object_or_404(Park, slug=self.kwargs['park_slug']) kwargs['park'] = self.park return kwargs def get_context_data(self, **kwargs): """Add park and park_slug to context""" context = super().get_context_data(**kwargs) context['park'] = self.park context['park_slug'] = self.park.slug context['is_edit'] = True return context def form_valid(self, form): """Handle form submission including new items""" # Check for new manufacturer manufacturer_name = form.cleaned_data.get('manufacturer_search') if manufacturer_name and not form.cleaned_data.get('manufacturer'): EditSubmission.objects.create( user=self.request.user, content_type=ContentType.objects.get_for_model(Manufacturer), submission_type="CREATE", changes={"name": manufacturer_name} ) # Check for new designer designer_name = form.cleaned_data.get('designer_search') if designer_name and not form.cleaned_data.get('designer'): EditSubmission.objects.create( user=self.request.user, content_type=ContentType.objects.get_for_model(Designer), submission_type="CREATE", changes={"name": designer_name} ) # Check for new ride model ride_model_name = form.cleaned_data.get('ride_model_search') manufacturer = form.cleaned_data.get('manufacturer') if ride_model_name and not form.cleaned_data.get('ride_model') and manufacturer: EditSubmission.objects.create( user=self.request.user, content_type=ContentType.objects.get_for_model(RideModel), submission_type="CREATE", changes={ "name": ride_model_name, "manufacturer": manufacturer.id } ) return super().form_valid(form)