From 9deb39dc468f4aea29b5d439220e9840ee7142f3 Mon Sep 17 00:00:00 2001 From: Nafees Anwar Date: Fri, 2 Apr 2021 13:28:51 +0500 Subject: [PATCH] Added deconstruct --- model_utils/fields.py | 5 +++++ tests/test_fields/test_urlsafe_token_field.py | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/model_utils/fields.py b/model_utils/fields.py index 116b524c..7cf0a735 100644 --- a/model_utils/fields.py +++ b/model_utils/fields.py @@ -349,3 +349,8 @@ def get_default(self): # generate a token of length x1.33 approx. trim up to max length token = secrets.token_urlsafe(self.max_length)[:self.max_length] return token + + def deconstruct(self): + name, path, args, kwargs = super().deconstruct() + kwargs['factory'] = self._factory + return name, path, args, kwargs diff --git a/tests/test_fields/test_urlsafe_token_field.py b/tests/test_fields/test_urlsafe_token_field.py index 5daaddbb..66aeb29d 100644 --- a/tests/test_fields/test_urlsafe_token_field.py +++ b/tests/test_fields/test_urlsafe_token_field.py @@ -53,3 +53,12 @@ def test_get_default_with_factory(self): def test_no_default_param(self): field = UrlsafeTokenField(default='DEFAULT') self.assertIs(field.default, NOT_PROVIDED) + + def test_deconstruct(self): + def test_factory(): + pass + instance = UrlsafeTokenField(factory=test_factory) + name, path, args, kwargs = instance.deconstruct() + new_instance = UrlsafeTokenField(*args, **kwargs) + self.assertIs(instance._factory, new_instance._factory) + self.assertIs(test_factory, new_instance._factory)