diff options
author | Nerl~ <nerlin57@gmail.com> | 2017-08-11 22:27:25 +0300 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2017-08-11 15:27:25 -0400 |
commit | 97cb3bd16d8e50d96eb184f8d67dd1723f776d2a (patch) | |
tree | aa4574295bf1eeee681402531bdcbdb582289fb6 /tests/model_regress | |
parent | 31f133ea08d41907a67f9e3d667f2a09c167a97c (diff) | |
download | django-97cb3bd16d8e50d96eb184f8d67dd1723f776d2a.tar.gz |
Fixed #28456 -- Allowed customizing Model pickling by overriding __getstate__().
Diffstat (limited to 'tests/model_regress')
-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')) |