mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 07:31:07 -05:00
86 lines
3.4 KiB
Python
86 lines
3.4 KiB
Python
# Keep all imports and previous classes up to RideCreateView
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.shortcuts import get_object_or_404
|
|
from django.urls import reverse
|
|
from django.views.generic import UpdateView
|
|
from companies.models import Manufacturer
|
|
from designers.models import Designer
|
|
from moderation.mixins import EditSubmissionMixin
|
|
from apps.parks.mixins.base import ParkContextRequired # type: ignore
|
|
from moderation.models import EditSubmission
|
|
from parks.models import Park
|
|
from rides.forms import RideForm # type: ignore
|
|
from .models import Ride, RideModel
|
|
|
|
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)
|