good stuff

This commit is contained in:
pacnpal
2024-10-29 21:29:16 -04:00
parent 4e970400ef
commit 6880f36b99
42 changed files with 2835 additions and 262 deletions

View File

@@ -5,5 +5,6 @@ app_name = 'rides'
urlpatterns = [
path('', views.RideListView.as_view(), name='ride_list'),
path('create/', views.RideCreateView.as_view(), name='ride_create'),
path('<slug:park_slug>/<slug:ride_slug>/', views.RideDetailView.as_view(), name='ride_detail'),
]

View File

@@ -1,13 +1,57 @@
from django.views.generic import DetailView, ListView
from django.views.generic import DetailView, ListView, CreateView
from django.shortcuts import get_object_or_404
from django.core.serializers.json import DjangoJSONEncoder
from django.urls import reverse
from django.db.models import Q
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.contenttypes.models import ContentType
from django.http import JsonResponse, HttpResponseRedirect
from .models import Ride, RollerCoasterStats
from parks.models import Park
from core.views import SlugRedirectMixin
from moderation.mixins import EditSubmissionMixin, PhotoSubmissionMixin, InlineEditMixin, HistoryMixin
from moderation.models import EditSubmission
class RideDetailView(SlugRedirectMixin, DetailView):
class RideCreateView(LoginRequiredMixin, CreateView):
model = Ride
template_name = 'rides/ride_form.html'
fields = ['name', 'park', 'park_area', 'category', 'manufacturer', 'model_name', 'status',
'opening_date', 'closing_date', 'status_since', 'min_height_in', 'max_height_in',
'accessibility_options', 'capacity_per_hour', 'ride_duration_seconds', 'description']
def form_valid(self, form):
# If user is moderator or above, save directly
if self.request.user.role in ['MODERATOR', 'ADMIN', 'SUPERUSER']:
self.object = form.save()
return HttpResponseRedirect(self.get_success_url())
# Otherwise, create a submission
cleaned_data = form.cleaned_data.copy()
# Convert model instances to IDs for JSON serialization
if cleaned_data.get('park'):
cleaned_data['park'] = cleaned_data['park'].id
if cleaned_data.get('park_area'):
cleaned_data['park_area'] = cleaned_data['park_area'].id
if cleaned_data.get('manufacturer'):
cleaned_data['manufacturer'] = cleaned_data['manufacturer'].id
submission = EditSubmission.objects.create(
user=self.request.user,
content_type=ContentType.objects.get_for_model(Ride),
submission_type='CREATE',
changes=cleaned_data,
reason=self.request.POST.get('reason', ''),
source=self.request.POST.get('source', '')
)
return HttpResponseRedirect(reverse('rides:ride_list'))
def get_success_url(self):
return reverse('rides:ride_detail', kwargs={
'park_slug': self.object.park.slug,
'ride_slug': self.object.slug
})
class RideDetailView(SlugRedirectMixin, EditSubmissionMixin, PhotoSubmissionMixin, InlineEditMixin, HistoryMixin, DetailView):
model = Ride
template_name = 'rides/ride_detail.html'
context_object_name = 'ride'
@@ -31,7 +75,7 @@ class RideDetailView(SlugRedirectMixin, DetailView):
return context
def get_redirect_url_pattern(self):
return 'ride_detail'
return 'rides:ride_detail'
def get_redirect_url_kwargs(self):
return {
@@ -88,8 +132,6 @@ class RideListView(ListView):
return context
def get(self, request, *args, **kwargs):
# Check if this is an HTMX request
if request.htmx: