mirror of
https://github.com/jazzband/django-eav2.git
synced 2026-03-24 10:20:24 +00:00
Adding configuration and test for related name in generic relation + fixing bug or some hardcoded name
This commit is contained in:
parent
cd641d2714
commit
2dba6275d4
3 changed files with 31 additions and 12 deletions
|
|
@ -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()
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
4
utils.py
4
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',
|
||||
|
|
|
|||
Loading…
Reference in a new issue