From 59bf25edb158ff8f9935ae3a8a0b760a3397b0d8 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 24 May 2025 09:45:07 -0700 Subject: [PATCH] Fix: created date fixes in v2.16 (#10026) --- .../migrations/1067_alter_document_created.py | 29 ++++++++++++++----- .../migrations/1068_alter_document_created.py | 24 +++++++++++++++ src/documents/models.py | 2 +- 3 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 src/documents/migrations/1068_alter_document_created.py diff --git a/src/documents/migrations/1067_alter_document_created.py b/src/documents/migrations/1067_alter_document_created.py index 82736f980..c2c4af531 100644 --- a/src/documents/migrations/1067_alter_document_created.py +++ b/src/documents/migrations/1067_alter_document_created.py @@ -5,28 +5,41 @@ import datetime from django.db import migrations from django.db import models -from django.db.models.functions import TruncDate +from django.utils.timezone import localtime def migrate_date(apps, schema_editor): Document = apps.get_model("documents", "Document") - queryset = Document.objects.annotate( - truncated_created=TruncDate("created"), - ).values("id", "truncated_created") # Batch to avoid loading all objects into memory at once, # which would be problematic for large datasets. batch_size = 500 updates = [] - for item in queryset.iterator(chunk_size=batch_size): - updates.append( - Document(id=item["id"], created_date=item["truncated_created"]), - ) + total_updated = 0 + total_checked = 0 + + for doc in Document.objects.only("id", "created").iterator(chunk_size=batch_size): + total_checked += 1 + if doc.created: + doc.created_date = localtime(doc.created).date() + updates.append(doc) + if len(updates) >= batch_size: Document.objects.bulk_update(updates, ["created_date"]) + total_updated += len(updates) + print( + f"[1067_alter_document_created] {total_updated} of {total_checked} processed...", + ) updates.clear() + if updates: Document.objects.bulk_update(updates, ["created_date"]) + total_updated += len(updates) + print( + f"[1067_alter_document_created] {total_updated} of {total_checked} processed...", + ) + + print(f"[1067_alter_document_created] completed for {total_checked} documents.") class Migration(migrations.Migration): diff --git a/src/documents/migrations/1068_alter_document_created.py b/src/documents/migrations/1068_alter_document_created.py new file mode 100644 index 000000000..b673f6584 --- /dev/null +++ b/src/documents/migrations/1068_alter_document_created.py @@ -0,0 +1,24 @@ +# Generated by Django 5.1.8 on 2025-05-23 05:50 + +import datetime + +from django.db import migrations +from django.db import models + + +class Migration(migrations.Migration): + dependencies = [ + ("documents", "1067_alter_document_created"), + ] + + operations = [ + migrations.AlterField( + model_name="document", + name="created", + field=models.DateField( + db_index=True, + default=datetime.date.today, + verbose_name="created", + ), + ), + ] diff --git a/src/documents/models.py b/src/documents/models.py index 17d1035dd..e93f14054 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -215,7 +215,7 @@ class Document(SoftDeleteModel, ModelWithOwner): created = models.DateField( _("created"), - default=datetime.datetime.today, + default=datetime.date.today, db_index=True, )