From a59a30337c827b0a9c8ada04d5870eb7e949fcb1 Mon Sep 17 00:00:00 2001 From: fredkingham Date: Sat, 4 May 2019 19:46:58 +0100 Subject: [PATCH] handle reverse foreign key serialization --- opal/models.py | 6 +++++- opal/tests/models.py | 4 +++- opal/tests/test_models.py | 12 ++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/opal/models.py b/opal/models.py index 81f79e9b1..d3c01309a 100644 --- a/opal/models.py +++ b/opal/models.py @@ -174,7 +174,11 @@ def _get_field_title(cls, name): @classmethod def _get_field_default(cls, name): field = cls._get_field(name) - default = field.get_default() + + if isinstance(field, models.ManyToOneRel): + default = [] + else: + default = field.get_default() # for blank fields the result is a blank string, lets just remove that if default == '': diff --git a/opal/tests/models.py b/opal/tests/models.py index eaeeb74fe..6c3c09cc9 100644 --- a/opal/tests/models.py +++ b/opal/tests/models.py @@ -73,7 +73,9 @@ class HouseOwner(models.PatientSubrecord): class House(dmodels.Model): address = dmodels.CharField(max_length=200) - house_owner = dmodels.ForeignKey(HouseOwner, null=True, blank=True, on_delete=dmodels.CASCADE) + house_owner = dmodels.ForeignKey( + HouseOwner, null=True, blank=True, on_delete=dmodels.CASCADE + ) class Dog(lookuplists.LookupList): diff --git a/opal/tests/test_models.py b/opal/tests/test_models.py index c6b0b15d9..a4a980727 100644 --- a/opal/tests/test_models.py +++ b/opal/tests/test_models.py @@ -3,7 +3,7 @@ """ import os import datetime -from mock import patch, MagicMock +from mock import patch from django.conf import settings from django.utils import timezone @@ -428,8 +428,8 @@ def test_get_title_over_many_to_many(self): self.assertEqual(hats, "Hats") def test_get_title_over_reverse_foreign_key(self): - hats = HouseOwner._get_field_title("house") - self.assertEqual(hats, "Houses") + houses = HouseOwner._get_field_title("house") + self.assertEqual(houses, "Houses") def test_verbose_name(self): only_words = FamousLastWords._get_field_title("words") @@ -463,6 +463,10 @@ def test_get_defaults_from_free_text_and_foreign_key(self): def test_get_defaults_from_free_text_and_foreign_key_lambda(self): self.assertEqual("spaniel", HoundOwner._get_field_default("dog")) + def test_get_defaults_from_reverse_foreign_key(self): + houses = HouseOwner._get_field_default("house") + self.assertEqual([], houses) + def test_get_defaults_from_ftfk_when_there_are_no_defaults(self): self.assertEqual(None, Colour._get_field_default("name")) @@ -860,4 +864,4 @@ def test_str(self): class UserProfileTestCase(OpalTestCase): def test_create(self): user = User.objects.create() - self.assertTrue(bool(user.profile)) \ No newline at end of file + self.assertTrue(bool(user.profile))