From 4a6b589963d611adfef90ca52a576978be9af0d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Wed, 14 Jun 2017 00:51:55 +0200 Subject: [PATCH] _parse_change for all changes about existing objects --- src/c3nav/editor/models.py | 33 +++++++++++++++++++++++++++------ src/c3nav/editor/wrappers.py | 2 +- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/c3nav/editor/models.py b/src/c3nav/editor/models.py index a0d588ef..d10b8864 100644 --- a/src/c3nav/editor/models.py +++ b/src/c3nav/editor/models.py @@ -31,8 +31,10 @@ class ChangeSet(models.Model): super().__init__(*args, **kwargs) self.default_author = None self.parsed = False - self.updated_values = {} + self.updated_existing = {} self.deleted_existing = {} + self.m2m_add_existing = {} + self.m2m_remove_existing = {} def parse_changes(self): if self.parsed: @@ -41,13 +43,32 @@ class ChangeSet(models.Model): self._parse_change(change) def _parse_change(self, change): - if change.action == 'update': - self.updated_values.setdefault(change.model_class, {}).setdefault(change.obj_pk, {}).update({ - change.field_name: json.loads(change.field_value) - }) + if change.action == 'delchange': + raise NotImplementedError + + model = change.model_class + if change.action == 'create': + raise NotImplementedError elif change.action == 'delete': if change.existing_object_pk is not None: - self.deleted_existing.setdefault(change.model_class, set()).add(change.existing_object_pk) + self.deleted_existing.setdefault(model, set()).add(change.existing_object_pk) + else: + raise NotImplementedError + return + + value = json.loads(change.field_value) + if change.existing_object_pk is None: + raise NotImplementedError + + if change.action == 'update': + value = json.loads(change.field_value) + self.updated_existing.setdefault(model, {}).setdefault(change.obj_pk, {}).update({ + change.field_name: value + }) + elif change.action == 'm2m_add': + self.m2m_add_existing.setdefault(model, {}).setdefault(change.obj_pk, set()).add(value) + elif change.action == 'm2m_add': + self.m2m_remove_existing.setdefault(model, {}).setdefault(change.obj_pk, set()).add(value) @classmethod def qs_base(cls, hide_applied=True): diff --git a/src/c3nav/editor/wrappers.py b/src/c3nav/editor/wrappers.py index 255a5f77..034dbfa3 100644 --- a/src/c3nav/editor/wrappers.py +++ b/src/c3nav/editor/wrappers.py @@ -101,7 +101,7 @@ class ModelInstanceWrapper(BaseWrapper): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - updates = self._changeset.updated_values.get(type(self._obj), {}).get(self._obj.pk, {}) + updates = self._changeset.updated_existing.get(type(self._obj), {}).get(self._obj.pk, {}) self._initial_values = {} for field in self._obj._meta.get_fields(): if field.related_model is None: