Adding configuration and test for related name in generic relation + fixing bug or some hardcoded name

This commit is contained in:
ksamuel 2010-09-10 13:49:11 +00:00
parent cd641d2714
commit 2dba6275d4
3 changed files with 31 additions and 12 deletions

View file

@ -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()

View file

@ -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)

View file

@ -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',