From bcd35f35261e2d8f2866f07ee24b48f0010dabd4 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 11 Aug 2023 16:14:44 -0400 Subject: [PATCH] remove last_editor field from db --- catalog/common/models.py | 11 +++++++---- .../migrations/0011_remove_item_last_editor.py | 17 +++++++++++++++++ catalog/models.py | 1 - catalog/templates/catalog_history.html | 9 ++++++++- catalog/templates/item_base.html | 2 +- catalog/views_edit.py | 2 -- journal/importers/douban.py | 2 -- journal/importers/goodreads.py | 2 -- 8 files changed, 33 insertions(+), 13 deletions(-) create mode 100644 catalog/migrations/0011_remove_item_last_editor.py diff --git a/catalog/common/models.py b/catalog/common/models.py index daa08ba4..e0818efa 100644 --- a/catalog/common/models.py +++ b/catalog/common/models.py @@ -17,7 +17,6 @@ from ninja import Schema from polymorphic.models import PolymorphicModel from catalog.common import jsondata -from users.models import User from .mixins import SoftDeleteMixin from .utils import DEFAULT_ITEM_COVER, item_cover_path, resource_cover_path @@ -25,6 +24,8 @@ from .utils import DEFAULT_ITEM_COVER, item_cover_path, resource_cover_path if TYPE_CHECKING: from django.utils.functional import _StrOrPromise + from users.models import User + _logger = logging.getLogger(__name__) @@ -274,9 +275,6 @@ class Item(SoftDeleteMixin, PolymorphicModel): default=None, related_name="merged_from_items", ) - last_editor = models.ForeignKey( - User, on_delete=models.SET_NULL, related_name="+", null=True, blank=False - ) class Meta: index_together = [ @@ -293,6 +291,11 @@ class Item(SoftDeleteMixin, PolymorphicModel): object_id=self.id, content_type_id__in=list(item_content_types().values()) ) + @cached_property + def last_editor(self) -> "User | None": + last_edit = self.history.order_by("-timestamp").first() + return last_edit.actor if last_edit else None + def clear(self): self.set_parent_item(None) self.primary_lookup_id_value = None diff --git a/catalog/migrations/0011_remove_item_last_editor.py b/catalog/migrations/0011_remove_item_last_editor.py new file mode 100644 index 00000000..c5f3948e --- /dev/null +++ b/catalog/migrations/0011_remove_item_last_editor.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.4 on 2023-08-11 20:13 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("catalog", "0010_alter_item_polymorphic_ctype"), + ] + + operations = [ + migrations.RemoveField( + model_name="item", + name="last_editor", + ), + ] diff --git a/catalog/models.py b/catalog/models.py index b37b3034..51c6cda7 100644 --- a/catalog/models.py +++ b/catalog/models.py @@ -87,7 +87,6 @@ def init_catalog_audit_log(): "metadata", "created_time", "edited_time", - "last_editor", # related fields are not supported in django-auditlog yet "lookup_ids", "external_resources", diff --git a/catalog/templates/catalog_history.html b/catalog/templates/catalog_history.html index 4a8a2073..3dd9bc95 100644 --- a/catalog/templates/catalog_history.html +++ b/catalog/templates/catalog_history.html @@ -43,7 +43,14 @@ {% for log in item.history.all %} - {{ log.actor }} {{ log.get_action_display }} on {{ log.timestamp }} + + {% if request.user.is_staff or log.actor.preference.show_last_edit %} + {{ log.actor.handler }} + {% else %} + + {% endif %} + + {{ log.get_action_display }} on {{ log.timestamp }} {% for key, value in log.changes_dict.items %} diff --git a/catalog/templates/item_base.html b/catalog/templates/item_base.html index 1f1ef373..bc3a2afe 100644 --- a/catalog/templates/item_base.html +++ b/catalog/templates/item_base.html @@ -146,7 +146,7 @@ {% if item.last_editor and item.last_editor.preference.show_last_edit %} {% trans '最近编辑:' %} - {{ item.last_editor | default:"" }} + {{ item.last_editor.display_name | default:"" }} {% endif %} diff --git a/catalog/views_edit.py b/catalog/views_edit.py index 47c479ec..9c3de809 100644 --- a/catalog/views_edit.py +++ b/catalog/views_edit.py @@ -61,7 +61,6 @@ def create(request, item_model): f"Invalid parent type: {form.instance.__class__} -> {parent.__class__}" ) if form.is_valid(): - form.instance.last_editor = request.user form.instance.edited_time = timezone.now() if parent: form.instance.set_parent_item(parent) @@ -110,7 +109,6 @@ def edit(request, item_path, item_uuid): form.fields["primary_lookup_id_type"].disabled = True form.fields["primary_lookup_id_value"].disabled = True if form.is_valid(): - form.instance.last_editor = request.user form.instance.edited_time = timezone.now() form.instance.save() return redirect(form.instance.url) diff --git a/journal/importers/douban.py b/journal/importers/douban.py index 1f28dfd5..820452c6 100644 --- a/journal/importers/douban.py +++ b/journal/importers/douban.py @@ -312,8 +312,6 @@ class DoubanImporter: print(f"fetching {url}") site.get_resource_ready() item = site.get_item() - item.last_editor = self.user - item.save() else: # print(f"matched {url}") print(".", end="", flush=True) diff --git a/journal/importers/goodreads.py b/journal/importers/goodreads.py index b0b7276e..80187442 100644 --- a/journal/importers/goodreads.py +++ b/journal/importers/goodreads.py @@ -114,8 +114,6 @@ class GoodreadsImporter: resource = site.get_resource_ready() if resource and resource.item: book = resource.item - book.last_editor = user - book.save() return book @classmethod