mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 17:51:08 -05:00
106 lines
3.5 KiB
Python
106 lines
3.5 KiB
Python
from django.views.generic import DetailView, ListView
|
|
from django.shortcuts import get_object_or_404
|
|
from .models import Company, Manufacturer
|
|
from rides.models import Ride
|
|
from parks.models import Park
|
|
from core.views import SlugRedirectMixin
|
|
|
|
class CompanyDetailView(SlugRedirectMixin, DetailView):
|
|
model = Company
|
|
template_name = 'companies/company_detail.html'
|
|
context_object_name = 'company'
|
|
|
|
def get_object(self, queryset=None):
|
|
if queryset is None:
|
|
queryset = self.get_queryset()
|
|
slug = self.kwargs.get(self.slug_url_kwarg)
|
|
# Try to get by current or historical slug
|
|
return self.model.get_by_slug(slug)[0]
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['parks'] = Park.objects.filter(
|
|
owner=self.object
|
|
).select_related('owner')
|
|
return context
|
|
|
|
def get_redirect_url_pattern(self):
|
|
return 'company_detail'
|
|
|
|
class ManufacturerDetailView(SlugRedirectMixin, DetailView):
|
|
model = Manufacturer
|
|
template_name = 'companies/manufacturer_detail.html'
|
|
context_object_name = 'manufacturer'
|
|
|
|
def get_object(self, queryset=None):
|
|
if queryset is None:
|
|
queryset = self.get_queryset()
|
|
slug = self.kwargs.get(self.slug_url_kwarg)
|
|
# Try to get by current or historical slug
|
|
return self.model.get_by_slug(slug)[0]
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['rides'] = Ride.objects.filter(
|
|
manufacturer=self.object
|
|
).select_related('park', 'coaster_stats')
|
|
return context
|
|
|
|
def get_redirect_url_pattern(self):
|
|
return 'manufacturer_detail'
|
|
|
|
class CompanyListView(ListView):
|
|
model = Company
|
|
template_name = 'companies/company_list.html'
|
|
context_object_name = 'companies'
|
|
paginate_by = 12
|
|
|
|
def get_queryset(self):
|
|
queryset = Company.objects.all()
|
|
|
|
# Filter by country if specified
|
|
country = self.request.GET.get('country')
|
|
if country:
|
|
queryset = queryset.filter(headquarters__icontains=country)
|
|
|
|
# Search by name if specified
|
|
search = self.request.GET.get('search')
|
|
if search:
|
|
queryset = queryset.filter(name__icontains=search)
|
|
|
|
return queryset.order_by('name')
|
|
|
|
class ManufacturerListView(ListView):
|
|
model = Manufacturer
|
|
template_name = 'companies/manufacturer_list.html'
|
|
context_object_name = 'manufacturers'
|
|
paginate_by = 12
|
|
|
|
def get_queryset(self):
|
|
queryset = Manufacturer.objects.all()
|
|
|
|
# Filter by country if specified
|
|
country = self.request.GET.get('country')
|
|
if country:
|
|
queryset = queryset.filter(headquarters__icontains=country)
|
|
|
|
# Search by name if specified
|
|
search = self.request.GET.get('search')
|
|
if search:
|
|
queryset = queryset.filter(name__icontains=search)
|
|
|
|
return queryset.order_by('name')
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
# Add stats for filtering
|
|
context['total_manufacturers'] = self.model.objects.count()
|
|
context['total_rides'] = Ride.objects.filter(
|
|
manufacturer__isnull=False
|
|
).count()
|
|
context['total_roller_coasters'] = Ride.objects.filter(
|
|
manufacturer__isnull=False,
|
|
category='RC'
|
|
).count()
|
|
return context
|