From 7310f9aa44b37093da311818f741536aef4f47fb Mon Sep 17 00:00:00 2001 From: Akita Noek Date: Sat, 26 Mar 2016 09:56:57 -0400 Subject: [PATCH] Be lazier with original parent role computations to avoid unnecessary queries --- awx/main/fields.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/awx/main/fields.py b/awx/main/fields.py index 292fd78bdb..d26e64114b 100644 --- a/awx/main/fields.py +++ b/awx/main/fields.py @@ -3,7 +3,6 @@ # Django from django.db.models.signals import ( - post_init, pre_save, post_save, post_delete, @@ -105,7 +104,6 @@ class ImplicitRoleField(models.ForeignKey): setattr(cls, '__implicit_role_fields', []) getattr(cls, '__implicit_role_fields').append(self) - post_init.connect(self._post_init, cls, True, dispatch_uid='implicit-role-post-init') pre_save.connect(self._pre_save, cls, True, dispatch_uid='implicit-role-pre-save') post_save.connect(self._post_save, cls, True, dispatch_uid='implicit-role-post-save') post_delete.connect(self._post_delete, cls, True) @@ -163,15 +161,6 @@ class ImplicitRoleField(models.ForeignKey): getattr(instance, self.name).parents.remove(getattr(obj, field_attr)) return _m2m_update - - def _post_init(self, instance, *args, **kwargs): - original_parent_roles = dict() - if instance.pk: - for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'): - original_parent_roles[implicit_role_field.name] = implicit_role_field._resolve_parent_roles(instance) - - setattr(instance, '__original_parent_roles', original_parent_roles) - def _create_role_instance_if_not_exists(self, instance): role = getattr(instance, self.name, None) if role: @@ -213,6 +202,15 @@ class ImplicitRoleField(models.ForeignKey): for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'): implicit_role_field._create_role_instance_if_not_exists(instance) + original_parent_roles = dict() + if instance.pk: + original = instance.__class__.objects.get(pk=instance.pk) + for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'): + original_parent_roles[implicit_role_field.name] = implicit_role_field._resolve_parent_roles(original) + + setattr(instance, '__original_parent_roles', original_parent_roles) + + def _post_save(self, instance, created, *args, **kwargs): if created: for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):