fix problem with multiple deletions and changesets

This commit is contained in:
Laura Klünder 2017-07-27 14:13:00 +02:00
parent e85b5682cb
commit 5db79819bc

View file

@ -4,6 +4,7 @@ from collections import OrderedDict
from functools import reduce, wraps from functools import reduce, wraps
from itertools import chain from itertools import chain
from django.core.exceptions import ObjectDoesNotExist
from django.db import models from django.db import models
from django.db.models import FieldDoesNotExist, Manager, ManyToManyRel, Prefetch, Q from django.db.models import FieldDoesNotExist, Manager, ManyToManyRel, Prefetch, Q
from django.utils.functional import cached_property from django.utils.functional import cached_property
@ -390,8 +391,11 @@ class BaseQueryWrapper(BaseWrapper):
for model in submodels: for model in submodels:
for pk, values in self._changeset.created_objects.get(model, {}).items(): for pk, values in self._changeset.created_objects.get(model, {}).items():
field_name = getattr(model._meta.get_field(field_name), 'attname', field_name) field_name = getattr(model._meta.get_field(field_name), 'attname', field_name)
if check(getattr(self._changeset.get_created_object(self._obj.model, pk), field_name)): try:
created_pks.add(pk) if check(getattr(self._changeset.get_created_object(self._obj.model, pk), field_name)):
created_pks.add(pk)
except ObjectDoesNotExist:
pass
return (q & ~Q(pk__in=remove_pks)) | Q(pk__in=add_pks), created_pks return (q & ~Q(pk__in=remove_pks)) | Q(pk__in=add_pks), created_pks