From ece15b83819c3481123c30e4065047e90a381cf3 Mon Sep 17 00:00:00 2001 From: amureki Date: Fri, 25 Mar 2016 14:30:30 +0100 Subject: [PATCH] Added choices field representation --- reversion_compare/compare.py | 7 +++++++ tests/models.py | 7 +++++++ tests/test_utils/test_data.py | 2 ++ tests/test_variant_model.py | 4 ++++ 4 files changed, 20 insertions(+) diff --git a/reversion_compare/compare.py b/reversion_compare/compare.py index c63b3afc..26b8307d 100644 --- a/reversion_compare/compare.py +++ b/reversion_compare/compare.py @@ -53,6 +53,10 @@ def _obj_repr(self, obj): except Exception as e: return repr(obj) + def _choices_repr(self, obj): + return force_text(dict(self.field.flatchoices).get(obj, obj), + strings_only=True) + def _to_string_ManyToManyField(self): queryset = self.get_many_to_many() return ", ".join([self._obj_repr(item) for item in queryset]) @@ -68,6 +72,9 @@ def to_string(self): func = getattr(self, func_name) return func() + if self.field.choices: + return self._choices_repr(self.value) + if isinstance(self.value, str): return self.value else: diff --git a/tests/models.py b/tests/models.py index f3597bad..74e32051 100644 --- a/tests/models.py +++ b/tests/models.py @@ -98,10 +98,17 @@ class VariantModel(models.Model): TODO: Add tests for all variants! """ + + TEST_CHOICES = ( + ('a', 'alpha'), + ('b', 'bravo'), + ) boolean = models.BooleanField(default=True) null_boolean = models.NullBooleanField() char = models.CharField(max_length=1, blank=True, null=True) + choices_char = models.CharField(max_length=1, blank=True, null=True, + choices=TEST_CHOICES) text = models.TextField(blank=True, null=True) # skip: models.SlugField() diff --git a/tests/test_utils/test_data.py b/tests/test_utils/test_data.py index 0537a151..9e892c1f 100644 --- a/tests/test_utils/test_data.py +++ b/tests/test_utils/test_data.py @@ -306,6 +306,7 @@ def create_VariantModel_data(self): null_boolean = None, char = "a", + choices_char = 'a', text = "Foo 'one'", # skip: models.SlugField() @@ -340,6 +341,7 @@ def create_VariantModel_data(self): ("null_boolean", True), ("null_boolean", False), ("char", "B"), + ("choices_char", "b"), ("text", "Bar 'two'"), # skip: models.SlugField() ("integer", -1), diff --git a/tests/test_variant_model.py b/tests/test_variant_model.py index eb9a9ec0..31e31c36 100644 --- a/tests/test_variant_model.py +++ b/tests/test_variant_model.py @@ -138,6 +138,10 @@ def test_all_changes(self): "- a", "+ B", + "

choices char

", + "- alpha", + "+ bravo", + "

text

", "- Foo 'one'", "+ Bar 'two'",