_parse_change for all changes about existing objects
This commit is contained in:
parent
1b8116fe7d
commit
4a6b589963
2 changed files with 28 additions and 7 deletions
|
@ -31,8 +31,10 @@ class ChangeSet(models.Model):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.default_author = None
|
self.default_author = None
|
||||||
self.parsed = False
|
self.parsed = False
|
||||||
self.updated_values = {}
|
self.updated_existing = {}
|
||||||
self.deleted_existing = {}
|
self.deleted_existing = {}
|
||||||
|
self.m2m_add_existing = {}
|
||||||
|
self.m2m_remove_existing = {}
|
||||||
|
|
||||||
def parse_changes(self):
|
def parse_changes(self):
|
||||||
if self.parsed:
|
if self.parsed:
|
||||||
|
@ -41,13 +43,32 @@ class ChangeSet(models.Model):
|
||||||
self._parse_change(change)
|
self._parse_change(change)
|
||||||
|
|
||||||
def _parse_change(self, change):
|
def _parse_change(self, change):
|
||||||
if change.action == 'update':
|
if change.action == 'delchange':
|
||||||
self.updated_values.setdefault(change.model_class, {}).setdefault(change.obj_pk, {}).update({
|
raise NotImplementedError
|
||||||
change.field_name: json.loads(change.field_value)
|
|
||||||
})
|
model = change.model_class
|
||||||
|
if change.action == 'create':
|
||||||
|
raise NotImplementedError
|
||||||
elif change.action == 'delete':
|
elif change.action == 'delete':
|
||||||
if change.existing_object_pk is not None:
|
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
|
@classmethod
|
||||||
def qs_base(cls, hide_applied=True):
|
def qs_base(cls, hide_applied=True):
|
||||||
|
|
|
@ -101,7 +101,7 @@ class ModelInstanceWrapper(BaseWrapper):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*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 = {}
|
self._initial_values = {}
|
||||||
for field in self._obj._meta.get_fields():
|
for field in self._obj._meta.get_fields():
|
||||||
if field.related_model is None:
|
if field.related_model is None:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue