From 2dba6275d4ec4989fbc4a695d359b3eeb2db25b8 Mon Sep 17 00:00:00 2001 From: ksamuel Date: Fri, 10 Sep 2010 13:49:11 +0000 Subject: [PATCH] Adding configuration and test for related name in generic relation + fixing bug or some hardcoded name --- models.py | 8 ++++++-- tests/basics.py | 31 +++++++++++++++++++++++-------- utils.py | 4 ++-- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/models.py b/models.py index 2a63d3a..8d49bf5 100644 --- a/models.py +++ b/models.py @@ -288,7 +288,7 @@ class EavEntity(object): cache.clear() return cache - + def get_eav_attributes(self): """ Return the attributes for this model @@ -365,6 +365,7 @@ class EavEntity(object): m_cls = self.model.__class__ return self.__class__.get_all_attribute_slugs_for_model(m_cls) + @classmethod def get_attribute_by_slug_for_model(cls, model_cls, slug): """ @@ -391,6 +392,9 @@ class EavEntity(object): @staticmethod def save_handler(sender, *args, **kwargs): - kwargs['instance'].eav.save() + from .utils import EavRegistry + config_cls = EavRegistry.get_config_cls_for_model(sender) + instance_eav = getattr(kwargs['instance'], config_cls.proxy_field_name) + instance_eav.save() diff --git a/tests/basics.py b/tests/basics.py index 6f153ac..078c1fd 100644 --- a/tests/basics.py +++ b/tests/basics.py @@ -121,14 +121,18 @@ class EavBasicTests(TestCase): def test_eavregistry_ataches_and_detaches_eav_attribute(self): + + self.assertTrue(self.entity.eav) + self.assertTrue(self.entity.eav_values) + self.assertTrue(self.value.entity) + # todo : should we have self.value.patient herer ? + EavRegistry.unregister(Patient) p = Patient() self.assertFalse(hasattr(p, 'eav')) - - EavRegistry.register(Patient) - p2 = Patient() - self.assertTrue(p2.eav) - + self.assertFalse(hasattr(p, 'eav')) + self.assertFalse(hasattr(p, 'eav_values')) + def test_eavregistry_accept_a_settings_class_with_get_queryset(self): EavRegistry.unregister(Patient) @@ -148,21 +152,32 @@ class EavBasicTests(TestCase): def test_eavregistry_accept_a_settings_class_with_field_names(self): - p = Patient() - registered_manager = Patient.objects + p = Patient.objects.create(name='Renaud') + registered_manager = Patient.objects + registered_eav_value = p.eav_values EavRegistry.unregister(Patient) class PatientEav(EavConfig): proxy_field_name = 'my_eav' manager_field_name ='my_objects' + generic_relation_field_name = 'my_eav_values' + generic_relation_field_related_name = "patient" EavRegistry.register(Patient, PatientEav) - p2 = Patient() + p2 = Patient.objects.create(name='Henry') self.assertEqual(type(p.eav), type(p2.my_eav)) + self.assertEqual(registered_eav_value.__class__.__name__, + p2.my_eav_values.__class__.__name__ ) self.assertEqual(type(registered_manager), type(Patient.my_objects)) + p2.my_eav.city = "Mbrarare" + p2.save() + value = EavValue.objects.get(value_text='Mbrarare') + name = PatientEav.generic_relation_field_related_name + self.assertTrue(value, name) + bak_registered_manager = Patient.objects EavRegistry.unregister(Patient) diff --git a/utils.py b/utils.py index 50ad70c..d70632a 100644 --- a/utils.py +++ b/utils.py @@ -123,12 +123,12 @@ class EavRegistry(object): pass # todo: make that overridable - # attache the generic relation to the model + # attach the generic relation to the model if config_cls.generic_relation_field_related_name: rel_name = config_cls.generic_relation_field_related_name else: rel_name = model_cls.__name__ - gr_name = config_cls.generic_relation_field_name + gr_name = config_cls.generic_relation_field_name.lower() generic_relation = generic.GenericRelation(EavValue, object_id_field='entity_id', content_type_field='entity_ct',