From 8498d311d5a74fefdf7e7babf3db582a0a3d5a82 Mon Sep 17 00:00:00 2001 From: Adam Goldsmith Date: Wed, 17 Jan 2024 13:31:10 -0500 Subject: [PATCH] membershipworks: Convert EventExt.person_hours to annotation --- membershipworks/models.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/membershipworks/models.py b/membershipworks/models.py index e4002e8..88b95c1 100644 --- a/membershipworks/models.py +++ b/membershipworks/models.py @@ -4,7 +4,7 @@ from datetime import datetime import django.core.mail.message from django.conf import settings from django.db import models -from django.db.models import Exists, F, OuterRef, Subquery, Sum +from django.db.models import Exists, ExpressionWrapper, F, OuterRef, Subquery, Sum from django.utils import timezone @@ -426,6 +426,11 @@ class EventExtManager(models.Manager["EventExt"]): .values("d")[:1], output_field=models.DurationField(), ), + person_hours=ExpressionWrapper( + ExpressionWrapper(F("duration"), models.IntegerField()) + * F("count"), + models.DurationField(), + ), ) ) @@ -448,14 +453,6 @@ class EventExt(Event): max_digits=13, decimal_places=4, default=0 ) - # TODO: ideally this would be a generated column or annotation, - # but I couldn't get the types to work out - @property - def person_hours(self): - if self.duration is None: - return None - return self.count * self.duration - class Meta: verbose_name = "event"