store titles instead of repr in changes

This commit is contained in:
Laura Klünder 2024-08-26 16:55:22 +02:00
parent bbce760707
commit 37ca7eab31
3 changed files with 16 additions and 7 deletions

View file

@ -120,7 +120,7 @@ class ChangedManyToMany(BaseSchema):
class ChangedObject(BaseSchema):
obj: ObjectReference
repr: str
titles: dict[str, str]
created: bool = False
deleted: bool = False
fields: FieldValuesDict = {}
@ -128,7 +128,7 @@ class ChangedObject(BaseSchema):
class CollectedChanges(BaseSchema):
prev_reprs: dict[str, dict[int, str]] = {}
prev_titles: dict[str, dict[int, dict[str, str]]] = {}
prev_values: dict[str, dict[int, FieldValuesDict]] = {}
operations: list[DatabaseOperation] = []
@ -151,7 +151,7 @@ class CollectedChanges(BaseSchema):
changed_object = objects.get(operation.obj, None)
if changed_object is None:
changed_object = ChangedObject(obj=operation.obj,
repr=self.prev_reprs[operation.obj.model][operation.obj.id])
titles=self.prev_titles[operation.obj.model][operation.obj.id])
objects[operation.obj] = changed_object
if isinstance(operation, CreateObjectOperation):
changed_object.created = True

View file

@ -64,7 +64,7 @@ class DatabaseOverlayManager:
pre_change_values = self.pre_change_values.pop(ref, None)
if pre_change_values:
self.changes.prev_values.setdefault(ref.model, {})[ref.id] = pre_change_values
self.changes.prev_reprs.setdefault(ref.model, {})[ref.id] = str(instance)
self.changes.prev_titles.setdefault(ref.model, {})[ref.id] = getattr(instance, 'titles', None)
return ref, pre_change_values

View file

@ -10,7 +10,7 @@ from django.http import Http404
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import NoReverseMatch, reverse
from django.utils.text import format_lazy
from django.utils.translation import get_language_info
from django.utils.translation import get_language_info, get_language
from django.utils.translation import gettext_lazy as _
from c3nav.editor.forms import ChangeSetForm, RejectForm, get_editor_form
@ -207,15 +207,24 @@ def changeset_detail(request, pk):
# redirect_changed_objects = []
# todo: display redirects nicely
current_lang = get_language()
for changed_object in changeset.changes.changed_objects:
model = apps.get_model("mapdata", changed_object.obj.model)
changes = []
title = None
if changed_object.titles:
if current_lang in changed_object.titles:
title = changed_object.titles[current_lang]
title = next(iter(changed_object.titles.values()))
changed_object_data = {
'model': model,
'model_title': model._meta.verbose_name,
'pk': changed_object.obj.id,
'desc': changed_object.repr,
'title': 'TITLE',
'desc': format_lazy(_('{model} #{id}'), model=model._meta.verbose_name, id=changed_object.obj.id),
'title': title,
'changes': changes,
'edit_url': None,
'deleted': changed_object.deleted,