From 1310e72e3f9327864f63defd8a8450bddef69800 Mon Sep 17 00:00:00 2001 From: Adam Goldsmith Date: Wed, 8 May 2024 12:45:34 -0400 Subject: [PATCH] membershipworks: Convert `EventExt.details_timestamp` to GeneratedField was waiting on Django 5.0.5 to fix https://code.djangoproject.com/ticket/35350 --- membershipworks/admin.py | 6 +---- .../0018_eventext_details_timestamp.py | 25 +++++++++++++++++++ membershipworks/models.py | 18 +++++++------ 3 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 membershipworks/migrations/0018_eventext_details_timestamp.py diff --git a/membershipworks/admin.py b/membershipworks/admin.py index 38d9347..428eaed 100644 --- a/membershipworks/admin.py +++ b/membershipworks/admin.py @@ -160,7 +160,7 @@ class EventAdmin(DjangoObjectActions, admin.ModelAdmin): else: fields.append(field.name) fields.insert(fields.index("end") + 1, "duration") - fields.append("_details_timestamp") + fields.append("details_timestamp") return fields @admin.display(ordering="title") @@ -178,10 +178,6 @@ class EventAdmin(DjangoObjectActions, admin.ModelAdmin): obj.url, ) - @admin.display(description="Last details fetch") - def _details_timestamp(self, obj): - return naturaltime(obj.details_timestamp) - @takes_instance_or_queryset def fetch_details(self, request, queryset): scrape_event_details(queryset) diff --git a/membershipworks/migrations/0018_eventext_details_timestamp.py b/membershipworks/migrations/0018_eventext_details_timestamp.py new file mode 100644 index 0000000..7c3da20 --- /dev/null +++ b/membershipworks/migrations/0018_eventext_details_timestamp.py @@ -0,0 +1,25 @@ +# Generated by Django 5.0.6 on 2024-05-08 16:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("membershipworks", "0017_eventext_registrations_alter_eventinvoice_pdf"), + ] + + operations = [ + migrations.AddField( + model_name="eventext", + name="details_timestamp", + field=models.GeneratedField( + db_persist=False, + expression=models.Func( + models.Func(models.F("details___ts"), function="FROM_UNIXTIME"), + template="CONVERT_TZ(%(expressions)s, @@session.time_zone, 'UTC')", + ), + output_field=models.DateTimeField(), + verbose_name="Last details fetch", + ), + ), + ] diff --git a/membershipworks/models.py b/membershipworks/models.py index 1b5d74d..207a8a1 100644 --- a/membershipworks/models.py +++ b/membershipworks/models.py @@ -520,14 +520,6 @@ class EventExtManager(models.Manager): ExpressionWrapper(F("duration"), models.IntegerField()) * F("count"), models.DurationField(), ), - # TODO: this could be a GeneratedField, but that - # currently breaks saving when the primary key is - # provided (Django 5.0.1) - details_timestamp=Func( - Func(F("details___ts"), function="FROM_UNIXTIME"), - template="CONVERT_TZ(%(expressions)s, @@session.time_zone, 'UTC')", - output_field=models.DateTimeField(), - ), ) @@ -550,6 +542,16 @@ class EventExt(Event): max_digits=13, decimal_places=4, default=0 ) details = models.JSONField(null=True, blank=True) + details_timestamp = models.GeneratedField( + expression=Func( + Func(F("details___ts"), function="FROM_UNIXTIME"), + template="CONVERT_TZ(%(expressions)s, @@session.time_zone, 'UTC')", + ), + output_field=models.DateTimeField(), + db_persist=False, + verbose_name="Last details fetch", + ) + registrations = models.JSONField(null=True, blank=True) def get_absolute_url(self) -> str: