diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/model_regress/test_pickle.py | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tests/model_regress/test_pickle.py b/tests/model_regress/test_pickle.py index a3df362e32..5fbe0a3cbb 100644 --- a/tests/model_regress/test_pickle.py +++ b/tests/model_regress/test_pickle.py @@ -43,3 +43,20 @@ class ModelPickleTestCase(TestCase): msg = "Pickled model instance's Django version 1.0 does not match the current version %s." % get_version() with self.assertRaisesMessage(RuntimeWarning, msg): pickle.loads(pickle.dumps(p)) + + def test_with_getstate(self): + """ + A model may override __getstate__() to choose the attributes to pickle. + """ + class PickledModel(models.Model): + def __getstate__(self): + state = super().__getstate__().copy() + del state['dont_pickle'] + return state + + m = PickledModel() + m.dont_pickle = 1 + dumped = pickle.dumps(m) + self.assertEqual(m.dont_pickle, 1) + reloaded = pickle.loads(dumped) + self.assertFalse(hasattr(reloaded, 'dont_pickle')) |
