From df83be216eab91c3e5167344e8ff8ae64723ee52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Fri, 22 Nov 2024 20:53:22 +0100 Subject: [PATCH] referenced_objects should also source data from m2m_changes --- src/c3nav/editor/changes.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/c3nav/editor/changes.py b/src/c3nav/editor/changes.py index d1066b6d..3b742d38 100644 --- a/src/c3nav/editor/changes.py +++ b/src/c3nav/editor/changes.py @@ -319,6 +319,16 @@ class ChangedObjectCollection(BaseSchema): elif isinstance(dependency, OperationDependencyNoProtectedReference): deleted_existing_objects.setdefault(dependency.obj.model, set()).add(dependency.obj.id) + # references from m2m changes need also to be checked if they exist + for model_name, changed_objects in self.objects.items(): + model = apps.get_model("mapdata", model_name) + # todo: how do we want m2m to work when it's cleared by the user but things were added in the meantime + for changed_obj in changed_objects.values(): + for field_name, m2m_changes in changed_obj.m2m_changes.items(): + referenced_objects.setdefault( + model._meta.get_field(field_name).related_model._meta.model_name, set() + ).update(set(m2m_changes.added + m2m_changes.removed)) + # let's find which objects that need to exist before actually exist for model, ids in referenced_objects.items(): model_cls = apps.get_model('mapdata', model)