diff --git a/drf_writable_nested/__init__.py b/drf_writable_nested/__init__.py index ca0b55c..d3b8bb4 100644 --- a/drf_writable_nested/__init__.py +++ b/drf_writable_nested/__init__.py @@ -1,5 +1,5 @@ __title__ = 'DRF writable nested' -__version__ = '0.6.3' +__version__ = '0.6.4' __author__ = 'beda.software' __license__ = 'BSD 2-Clause' __copyright__ = 'Copyright 2014-2020 beda.software' diff --git a/drf_writable_nested/mixins.py b/drf_writable_nested/mixins.py index d3dc4c4..b75258d 100644 --- a/drf_writable_nested/mixins.py +++ b/drf_writable_nested/mixins.py @@ -185,6 +185,10 @@ def update_or_create_reverse_relations(self, instance, reverse_relations): try: serializer.is_valid(raise_exception=True) related_instance = serializer.save(**save_kwargs) + if not hasattr(self, 'nodelete_pks'): + self.nodelete_pks = {} + self.nodelete_pks[field_name] = self.nodelete_pks.get(field_name, []) + self.nodelete_pks[field_name].append(related_instance.pk) data['pk'] = related_instance.pk new_related_instances.append(related_instance) errors.append({}) @@ -329,7 +333,13 @@ def delete_reverse_relations_if_need(self, instance, reverse_relations): related_field.name: instance, } - current_ids = self._extract_related_pks(field, related_data) + if not hasattr(self, 'nodelete_pks'): + current_ids = self._extract_related_pks(field, related_data) + else: + current_ids = self.nodelete_pks.get( + field_name, + self._extract_related_pks(field, related_data) + ) try: pks_to_delete = list(