show edit_url in changeset view and fix some bugs

This commit is contained in:
Laura Klünder 2024-08-26 21:03:32 +02:00
parent f04475672f
commit 9d4a6b9d46

View file

@ -4,9 +4,11 @@ from django.apps import apps
from django.conf import settings from django.conf import settings
from django.contrib import messages from django.contrib import messages
from django.core.cache import cache from django.core.cache import cache
from django.db.models.fields.related import ManyToManyField
from django.http import Http404 from django.http import Http404
from django.shortcuts import get_object_or_404, redirect, render from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse from django.urls import reverse
from django.urls.exceptions import NoReverseMatch
from django.utils.text import format_lazy from django.utils.text import format_lazy
from django.utils.translation import get_language_info, get_language from django.utils.translation import get_language_info, get_language
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -189,22 +191,8 @@ def changeset_detail(request, pk):
ctx['changed_objects'] = changed_objects_data ctx['changed_objects'] = changed_objects_data
return render(request, 'editor/changeset.html', ctx) return render(request, 'editor/changeset.html', ctx)
objects = changeset.get_objects()
changed_objects_data = [] changed_objects_data = []
# added_redirects = {}
# removed_redirects = {}
# for changed_object in changeset.changed_objects.get(LocationRedirect, {}).values():
# if changed_object.is_created == changed_object.deleted:
# continue
# obj = objects[LocationRedirect][changed_object.obj_pk]
# redirect_list = (removed_redirects if changed_object.deleted else added_redirects)
# redirect_list.setdefault(obj.target_id, []).append(obj.slug)
#
# redirect_changed_objects = []
# todo: display redirects nicely
added_redirects = {} added_redirects = {}
removed_redirects = {} removed_redirects = {}
for changed_object in changeset.changes.changed_objects: for changed_object in changeset.changes.changed_objects:
@ -232,6 +220,21 @@ def changeset_detail(request, pk):
else: else:
title = next(iter(changed_object.titles.values())) title = next(iter(changed_object.titles.values()))
prev_values = changeset.changes.prev_values[changed_object.obj.model][changed_object.obj.id]
edit_url = None
if not changed_object.deleted:
# todo: only if it's active
reverse_kwargs = {'pk': changed_object.obj.id}
if "space" in prev_values:
reverse_kwargs["space"] = changed_object.fields.get("space", prev_values["space"])
elif "level" in prev_values:
reverse_kwargs["level"] = changed_object.fields.get("level", prev_values["level"])
try:
edit_url = reverse('editor.' + model._meta.default_related_name + '.edit', kwargs=reverse_kwargs)
except NoReverseMatch:
pass
changed_object_data = { changed_object_data = {
'model': model, 'model': model,
'model_title': model._meta.verbose_name, 'model_title': model._meta.verbose_name,
@ -239,7 +242,7 @@ def changeset_detail(request, pk):
'desc': format_lazy(_('{model} #{id}'), model=model._meta.verbose_name, id=changed_object.obj.id), 'desc': format_lazy(_('{model} #{id}'), model=model._meta.verbose_name, id=changed_object.obj.id),
'title': title, 'title': title,
'changes': changes, 'changes': changes,
'edit_url': None, 'edit_url': edit_url,
'deleted': changed_object.deleted, 'deleted': changed_object.deleted,
} }
@ -267,6 +270,7 @@ def changeset_detail(request, pk):
'title': _('created geometry') if changed_object.created else _('edited geometry'), 'title': _('created geometry') if changed_object.created else _('edited geometry'),
'order': (8,), 'order': (8,),
}) })
update_changes.append(change_data)
elif name == 'data': elif name == 'data':
change_data.update({ change_data.update({
'icon': 'signal', 'icon': 'signal',
@ -275,6 +279,7 @@ def changeset_detail(request, pk):
'title': _('created scan data') if changed_object.created else _('edited scan data'), 'title': _('created scan data') if changed_object.created else _('edited scan data'),
'order': (9,), 'order': (9,),
}) })
update_changes.append(change_data)
else: else:
field = model._meta.get_field(name) field = model._meta.get_field(name)
field_title = field.verbose_name field_title = field.verbose_name
@ -299,8 +304,12 @@ def changeset_detail(request, pk):
'order': (4, tuple(code for code, title in settings.LANGUAGES).index(lang)), 'order': (4, tuple(code for code, title in settings.LANGUAGES).index(lang)),
}) })
update_changes.append(sub_change_data) update_changes.append(sub_change_data)
elif isinstance(field, ManyToManyField):
continue
else: else:
if value == '' or value is None: if value == '' or value is None:
if changed_object.created:
continue
change_data.update({ change_data.update({
'empty': True, 'empty': True,
'title': format_lazy(_('remove {field_title}'), field_title=field_title), 'title': format_lazy(_('remove {field_title}'), field_title=field_title),