From deb7f8b94e5f0d55387a203a8bd70918bb226da2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Thu, 5 Dec 2024 17:45:52 +0100 Subject: [PATCH] why not show titles of related objects in changeset details, sounds nice --- .../editor/templates/editor/changeset.html | 6 +++- src/c3nav/editor/views/changes.py | 33 ++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/c3nav/editor/templates/editor/changeset.html b/src/c3nav/editor/templates/editor/changeset.html index 29ca18d0..2dcf18da 100644 --- a/src/c3nav/editor/templates/editor/changeset.html +++ b/src/c3nav/editor/templates/editor/changeset.html @@ -110,7 +110,11 @@ {% if change.missing_dependency or change.unique_collision %}{% endif %} {% if change.empty %}{% else %}{% endif %}{{ change.title }}{% if not change.empty %}:{% else %}{% endif %} - {{ change.value }} + {% if change.url %} + {{ change.value }} + {% else %} + {{ change.value }} + {% endif %} {% endfor %} diff --git a/src/c3nav/editor/views/changes.py b/src/c3nav/editor/views/changes.py index b6541755..cb5d936a 100644 --- a/src/c3nav/editor/views/changes.py +++ b/src/c3nav/editor/views/changes.py @@ -4,6 +4,7 @@ from django.apps import apps from django.conf import settings from django.contrib import messages from django.core.cache import cache +from django.core.exceptions import ObjectDoesNotExist, FieldDoesNotExist from django.db.models.fields.related import ManyToManyField from django.http import Http404 from django.shortcuts import get_object_or_404, redirect, render @@ -392,12 +393,42 @@ def changeset_detail(request, pk): 'title': format_lazy(_('remove {field_title}'), field_title=field_title), }) else: - # todo: if this is a reference, we wanna not show the id but something betterẞ # todo: display if dummy value was used or other problem exists with this field change_data.update({ 'title': field_title, 'value': value, }) + + if field.is_relation: + # todo: super imperformant, we should do this via prev etc + try: + related_obj = field.related_model.objects.get(pk=value) + except ObjectDoesNotExist: + related_model_name = field.related_model._meta.verbose_name + change_data["value"] = f"{related_model_name} #{value}" + else: + change_data["value"] = related_obj.title + reverse_kwargs = {'pk': changed_object.obj.id} + try: + field.related_model._meta.get_field("space") + except FieldDoesNotExist: + try: + field.related_model._meta.get_field("space") + except FieldDoesNotExist: + pass + else: + reverse_kwargs["level"] = related_obj.level_id + else: + reverse_kwargs["space"] = related_obj.space_id + + try: + related_url = reverse('editor.' + related_obj._meta.default_related_name + '.edit', + kwargs=reverse_kwargs) + except NoReverseMatch: + pass + else: + change_data["url"] = related_url + order = 5 if name == 'slug': order = 1