get_objects: get all LocationSlug submodels in one

This commit is contained in:
Laura Klünder 2017-07-06 15:12:57 +02:00
parent a43a3184e0
commit ac9a5f7be5

View file

@ -1,6 +1,8 @@
import operator
import typing import typing
from collections import OrderedDict from collections import OrderedDict
from contextlib import contextmanager from contextlib import contextmanager
from functools import reduce
from itertools import chain from itertools import chain
from django.apps import apps from django.apps import apps
@ -176,7 +178,6 @@ class ChangeSet(models.Model):
return chain(*(changed_objects.values() for changed_objects in self.changed_objects.values())) return chain(*(changed_objects.values() for changed_objects in self.changed_objects.values()))
def _clean_changes(self): def _clean_changes(self):
print('clean_changes')
changed_objects = self.changed_objects_set.all() changed_objects = self.changed_objects_set.all()
with self.lock_to_edit(): with self.lock_to_edit():
# delete changed objects that refer in some way to deleted objects and clean up m2m changes # delete changed objects that refer in some way to deleted objects and clean up m2m changes
@ -250,9 +251,16 @@ class ChangeSet(models.Model):
for change in changed_objects: for change in changed_objects:
change.add_relevant_object_pks(object_pks, many=many) change.add_relevant_object_pks(object_pks, many=many)
slug_submodels = tuple(model for model in object_pks.keys() if issubclass(model, LocationSlug))
object_pks[LocationSlug] = reduce(operator.or_, (object_pks[model] for model in slug_submodels))
for model in slug_submodels:
object_pks.pop(model)
# retrieve relevant objects # retrieve relevant objects
objects = {} objects = {}
for model, pks in object_pks.items(): for model, pks in object_pks.items():
if not pks:
continue
created_pks = set(pk for pk in pks if is_created_pk(pk)) created_pks = set(pk for pk in pks if is_created_pk(pk))
existing_pks = pks - created_pks existing_pks = pks - created_pks
model_objects = {} model_objects = {}