from django.db.models import QuerySet, Count, Q from .models import Park def get_base_park_queryset() -> QuerySet[Park]: """Get base queryset with all needed annotations and prefetches""" from django.contrib.contenttypes.models import ContentType park_type = ContentType.objects.get_for_model(Park) return ( Park.objects.select_related('operator', 'property_owner') .prefetch_related( 'photos', 'rides', 'location', 'location__content_type' ) .annotate( current_ride_count=Count('rides', distinct=True), current_coaster_count=Count('rides', filter=Q(rides__category="RC"), distinct=True) ) .order_by('name') )