From 26757e4930fa3fb504aee89eff18da12545f15db Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 26 Feb 2025 09:25:35 -0800 Subject: [PATCH] Add head_version --- .../migrations/1064_document_head_version.py | 26 +++++++++++++++++++ src/documents/models.py | 9 +++++++ src/documents/serialisers.py | 2 ++ src/documents/views.py | 5 ++-- 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/documents/migrations/1064_document_head_version.py diff --git a/src/documents/migrations/1064_document_head_version.py b/src/documents/migrations/1064_document_head_version.py new file mode 100644 index 000000000..d5ac49512 --- /dev/null +++ b/src/documents/migrations/1064_document_head_version.py @@ -0,0 +1,26 @@ +# Generated by Django 5.1.6 on 2025-02-26 17:08 + +import django.db.models.deletion +from django.db import migrations +from django.db import models + + +class Migration(migrations.Migration): + dependencies = [ + ("documents", "1063_alter_workflowactionwebhook_url_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="document", + name="head_version", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="versions", + to="documents.document", + verbose_name="head version of document", + ), + ), + ] diff --git a/src/documents/models.py b/src/documents/models.py index e93f14054..accde2bfe 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -289,6 +289,15 @@ class Document(SoftDeleteModel, ModelWithOwner): ), ) + head_version = models.ForeignKey( + "self", + blank=True, + null=True, + related_name="versions", + on_delete=models.CASCADE, + verbose_name=_("head version of document"), + ) + class Meta: ordering = ("-created",) verbose_name = _("document") diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 33a703f96..c3b9ca128 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -1103,6 +1103,8 @@ class DocumentSerializer( "remove_inbox_tags", "page_count", "mime_type", + "head_version", + "versions", ) list_serializer_class = OwnedObjectListSerializer diff --git a/src/documents/views.py b/src/documents/views.py index 002cb0eea..81673df98 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -559,7 +559,7 @@ class DocumentViewSet( GenericViewSet, ): model = Document - queryset = Document.objects.annotate(num_notes=Count("notes")) + queryset = Document.objects.all() serializer_class = DocumentSerializer pagination_class = StandardPagination permission_classes = (IsAuthenticated, PaperlessObjectPermissions) @@ -588,7 +588,8 @@ class DocumentViewSet( def get_queryset(self): return ( - Document.objects.distinct() + Document.objects.filter(head_version__isnull=True) + .distinct() .order_by("-created") .annotate(num_notes=Count("notes")) .select_related("correspondent", "storage_path", "document_type", "owner")