from django.db.models.signals import post_save, post_delete from django.dispatch import receiver from django.db.models import Count, Q from rides.models import Ride from .models import Park def update_park_ride_counts(park): """Update total_rides and total_roller_coasters for a park""" operating_rides = Q(status='OPERATING') # Count total operating rides total_rides = park.rides.filter(operating_rides).count() # Count total operating roller coasters total_coasters = park.rides.filter( operating_rides, category='RC' ).count() # Update park counts Park.objects.filter(id=park.id).update( total_rides=total_rides, total_roller_coasters=total_coasters ) @receiver(post_save, sender=Ride) def ride_saved(sender, instance, **kwargs): """Update park counts when a ride is saved""" update_park_ride_counts(instance.park) @receiver(post_delete, sender=Ride) def ride_deleted(sender, instance, **kwargs): """Update park counts when a ride is deleted""" update_park_ride_counts(instance.park)