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): class ChangedObject(BaseSchema):
obj: ObjectReference obj: ObjectReference
repr: str titles: dict[str, str]
created: bool = False created: bool = False
deleted: bool = False deleted: bool = False
fields: FieldValuesDict = {} fields: FieldValuesDict = {}
@ -128,7 +128,7 @@ class ChangedObject(BaseSchema):
class CollectedChanges(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]] = {} prev_values: dict[str, dict[int, FieldValuesDict]] = {}
operations: list[DatabaseOperation] = [] operations: list[DatabaseOperation] = []
@ -151,7 +151,7 @@ class CollectedChanges(BaseSchema):
changed_object = objects.get(operation.obj, None) changed_object = objects.get(operation.obj, None)
if changed_object is None: if changed_object is None:
changed_object = ChangedObject(obj=operation.obj, 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 objects[operation.obj] = changed_object
if isinstance(operation, CreateObjectOperation): if isinstance(operation, CreateObjectOperation):
changed_object.created = True changed_object.created = True

View file

@ -64,7 +64,7 @@ class DatabaseOverlayManager:
pre_change_values = self.pre_change_values.pop(ref, None) pre_change_values = self.pre_change_values.pop(ref, None)
if pre_change_values: if pre_change_values:
self.changes.prev_values.setdefault(ref.model, {})[ref.id] = 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 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.shortcuts import get_object_or_404, redirect, render
from django.urls import NoReverseMatch, reverse from django.urls import NoReverseMatch, reverse
from django.utils.text import format_lazy 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 django.utils.translation import gettext_lazy as _
from c3nav.editor.forms import ChangeSetForm, RejectForm, get_editor_form from c3nav.editor.forms import ChangeSetForm, RejectForm, get_editor_form
@ -207,15 +207,24 @@ def changeset_detail(request, pk):
# redirect_changed_objects = [] # redirect_changed_objects = []
# todo: display redirects nicely # todo: display redirects nicely
current_lang = get_language()
for changed_object in changeset.changes.changed_objects: for changed_object in changeset.changes.changed_objects:
model = apps.get_model("mapdata", changed_object.obj.model) model = apps.get_model("mapdata", changed_object.obj.model)
changes = [] 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 = { changed_object_data = {
'model': model, 'model': model,
'model_title': model._meta.verbose_name, 'model_title': model._meta.verbose_name,
'pk': changed_object.obj.id, 'pk': changed_object.obj.id,
'desc': changed_object.repr, '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': None,
'deleted': changed_object.deleted, 'deleted': changed_object.deleted,