signals.py 552 B

12345678910111213141516
  1. from django.db.models import Sum
  2. from django.db.models.signals import post_delete, post_save
  3. from django.dispatch import receiver
  4. from .models import VirtualDisk, VirtualMachine
  5. @receiver((post_delete, post_save), sender=VirtualDisk)
  6. def update_virtualmachine_disk(instance, **kwargs):
  7. """
  8. When a VirtualDisk has been modified, update the aggregate disk_size value of its VM.
  9. """
  10. vm = instance.virtual_machine
  11. VirtualMachine.objects.filter(pk=vm.pk).update(
  12. disk=vm.virtualdisks.aggregate(Sum('size'))['size__sum']
  13. )