Commit 9851e541 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

Merge pull request #4811 from mthornhill/12685

Fixed #12685 - Ensure that deserialised model instances honor the same arguments as normal models.
parents 55b3bd84 211c19c5
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -166,11 +166,11 @@ class DeserializedObject(object):
        return "<DeserializedObject: %s(pk=%s)>" % (
            self.object._meta.label, self.object.pk)

    def save(self, save_m2m=True, using=None):
    def save(self, save_m2m=True, using=None, **kwargs):
        # Call save on the Model baseclass directly. This bypasses any
        # model-defined save. The save is also forced to be raw.
        # raw=True is passed to any pre/post_save signals.
        models.Model.save_base(self.object, using=using, raw=True)
        models.Model.save_base(self.object, using=using, raw=True, **kwargs)
        if self.m2m_data and save_m2m:
            for accessor_name, object_list in self.m2m_data.items():
                setattr(self.object, accessor_name, object_list)
+9 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ from xml.dom import minidom
from django.core import management, serializers
from django.db import connection, transaction
from django.test import (
    SimpleTestCase, TestCase, TransactionTestCase, override_settings,
    SimpleTestCase, TestCase, TransactionTestCase, mock, override_settings,
    skipUnlessDBFeature,
)
from django.test.utils import Approximate
@@ -278,6 +278,14 @@ class SerializersTestBase(object):
            'second_category_pk': categories[1],
        })

    def test_deserialize_force_insert(self):
        """Tests that deserialized content can be saved with force_insert as a parameter."""
        serial_str = serializers.serialize(self.serializer_name, [self.a1])
        deserial_obj = list(serializers.deserialize(self.serializer_name, serial_str))[0]
        with mock.patch('django.db.models.Model') as mock_model:
            deserial_obj.save(force_insert=False)
            mock_model.save_base.assert_called_with(deserial_obj.object, raw=True, using=None, force_insert=False)


class SerializersTransactionTestBase(object):