mirror of
https://github.com/ansible/awx.git
synced 2026-05-08 01:47:35 -02:30
Be lazier with original parent role computations to avoid unnecessary queries
This commit is contained in:
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
# Django
|
# Django
|
||||||
from django.db.models.signals import (
|
from django.db.models.signals import (
|
||||||
post_init,
|
|
||||||
pre_save,
|
pre_save,
|
||||||
post_save,
|
post_save,
|
||||||
post_delete,
|
post_delete,
|
||||||
@@ -105,7 +104,6 @@ class ImplicitRoleField(models.ForeignKey):
|
|||||||
setattr(cls, '__implicit_role_fields', [])
|
setattr(cls, '__implicit_role_fields', [])
|
||||||
getattr(cls, '__implicit_role_fields').append(self)
|
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')
|
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_save.connect(self._post_save, cls, True, dispatch_uid='implicit-role-post-save')
|
||||||
post_delete.connect(self._post_delete, cls, True)
|
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))
|
getattr(instance, self.name).parents.remove(getattr(obj, field_attr))
|
||||||
return _m2m_update
|
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):
|
def _create_role_instance_if_not_exists(self, instance):
|
||||||
role = getattr(instance, self.name, None)
|
role = getattr(instance, self.name, None)
|
||||||
if role:
|
if role:
|
||||||
@@ -213,6 +202,15 @@ class ImplicitRoleField(models.ForeignKey):
|
|||||||
for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):
|
for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):
|
||||||
implicit_role_field._create_role_instance_if_not_exists(instance)
|
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):
|
def _post_save(self, instance, created, *args, **kwargs):
|
||||||
if created:
|
if created:
|
||||||
for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):
|
for implicit_role_field in getattr(instance.__class__, '__implicit_role_fields'):
|
||||||
|
|||||||
Reference in New Issue
Block a user