from django.views.generic import ListView, DetailView from django.db.models import QuerySet from django.core.exceptions import ObjectDoesNotExist from core.views import SlugRedirectMixin from .models import PropertyOwner from typing import Optional, Any, Dict class PropertyOwnerListView(ListView): model = PropertyOwner template_name = "property_owners/property_owner_list.html" context_object_name = "property_owners" paginate_by = 20 def get_queryset(self) -> QuerySet[PropertyOwner]: return PropertyOwner.objects.all().order_by('name') class PropertyOwnerDetailView(SlugRedirectMixin, DetailView): model = PropertyOwner template_name = "property_owners/property_owner_detail.html" context_object_name = "property_owner" def get_object(self, queryset: Optional[QuerySet[PropertyOwner]] = None) -> PropertyOwner: if queryset is None: queryset = self.get_queryset() slug = self.kwargs.get(self.slug_url_kwarg) if slug is None: raise ObjectDoesNotExist("No slug provided") property_owner, _ = PropertyOwner.get_by_slug(slug) return property_owner def get_queryset(self) -> QuerySet[PropertyOwner]: return PropertyOwner.objects.all() def get_context_data(self, **kwargs) -> Dict[str, Any]: context = super().get_context_data(**kwargs) property_owner = self.get_object() # Add related parks to context (using related_name="owned_parks" from Park model) context['owned_parks'] = property_owner.owned_parks.all().order_by('name') return context