Fix for ticket 12685

This commit is contained in:
mick 2015-06-05 15:58:36 +01:00
parent c91bc68e9a
commit 211c19c579
2 changed files with 11 additions and 3 deletions

View File

@ -166,11 +166,11 @@ class DeserializedObject(object):
return "<DeserializedObject: %s(pk=%s)>" % ( return "<DeserializedObject: %s(pk=%s)>" % (
self.object._meta.label, self.object.pk) 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 # Call save on the Model baseclass directly. This bypasses any
# model-defined save. The save is also forced to be raw. # model-defined save. The save is also forced to be raw.
# raw=True is passed to any pre/post_save signals. # 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: if self.m2m_data and save_m2m:
for accessor_name, object_list in self.m2m_data.items(): for accessor_name, object_list in self.m2m_data.items():
setattr(self.object, accessor_name, object_list) setattr(self.object, accessor_name, object_list)

View File

@ -11,7 +11,7 @@ from xml.dom import minidom
from django.core import management, serializers from django.core import management, serializers
from django.db import connection, transaction from django.db import connection, transaction
from django.test import ( from django.test import (
SimpleTestCase, TestCase, TransactionTestCase, override_settings, SimpleTestCase, TestCase, TransactionTestCase, mock, override_settings,
skipUnlessDBFeature, skipUnlessDBFeature,
) )
from django.test.utils import Approximate from django.test.utils import Approximate
@ -278,6 +278,14 @@ class SerializersTestBase(object):
'second_category_pk': categories[1], '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): class SerializersTransactionTestBase(object):