mirror of
https://github.com/ansible/awx.git
synced 2026-05-07 17:37:37 -02:30
AC-655 Add select_related to reduce number of queries for inventory views.
This commit is contained in:
@@ -570,6 +570,7 @@ class GroupTreeSerializer(GroupSerializer):
|
|||||||
if obj is None:
|
if obj is None:
|
||||||
return {}
|
return {}
|
||||||
children_qs = obj.children.filter(active=True)
|
children_qs = obj.children.filter(active=True)
|
||||||
|
children_qs = children_qs.select_related('inventory', 'inventory_source')
|
||||||
return GroupTreeSerializer(children_qs, many=True).data
|
return GroupTreeSerializer(children_qs, many=True).data
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -790,6 +790,7 @@ class InventoryTreeView(RetrieveAPIView):
|
|||||||
def retrieve(self, request, *args, **kwargs):
|
def retrieve(self, request, *args, **kwargs):
|
||||||
inventory = self.get_object()
|
inventory = self.get_object()
|
||||||
groups_qs = inventory.root_groups.filter(active=True)
|
groups_qs = inventory.root_groups.filter(active=True)
|
||||||
|
groups_qs = groups_qs.select_related('inventory', 'inventory_source')
|
||||||
data = GroupTreeSerializer(groups_qs, many=True).data
|
data = GroupTreeSerializer(groups_qs, many=True).data
|
||||||
return Response(data)
|
return Response(data)
|
||||||
|
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ class GroupAccess(BaseAccess):
|
|||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
qs = self.model.objects.filter(active=True).distinct()
|
qs = self.model.objects.filter(active=True).distinct()
|
||||||
qs = qs.select_related('created_by', 'inventory')
|
qs = qs.select_related('created_by', 'inventory', 'inventory_source')
|
||||||
qs = qs.prefetch_related('parents', 'children')
|
qs = qs.prefetch_related('parents', 'children')
|
||||||
inventories_qs = self.user.get_queryset(Inventory)
|
inventories_qs = self.user.get_queryset(Inventory)
|
||||||
return qs.filter(inventory__in=inventories_qs)
|
return qs.filter(inventory__in=inventories_qs)
|
||||||
@@ -443,7 +443,7 @@ class InventorySourceAccess(BaseAccess):
|
|||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
qs = self.model.objects.filter(active=True).distinct()
|
qs = self.model.objects.filter(active=True).distinct()
|
||||||
qs = qs.select_related('created_by', 'group')
|
qs = qs.select_related('created_by', 'group', 'inventory')
|
||||||
inventories_qs = self.user.get_queryset(Inventory)
|
inventories_qs = self.user.get_queryset(Inventory)
|
||||||
return qs.filter(Q(inventory__in=inventories_qs) |
|
return qs.filter(Q(inventory__in=inventories_qs) |
|
||||||
Q(group__inventory__in=inventories_qs))
|
Q(group__inventory__in=inventories_qs))
|
||||||
@@ -482,7 +482,8 @@ class InventoryUpdateAccess(BaseAccess):
|
|||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
qs = InventoryUpdate.objects.filter(active=True).distinct()
|
qs = InventoryUpdate.objects.filter(active=True).distinct()
|
||||||
qs = qs.select_related('created_by', 'group')
|
qs = qs.select_related('created_by', 'inventory_source__group',
|
||||||
|
'inventory_source__inventory')
|
||||||
inventory_sources_qs = self.user.get_queryset(InventorySource)
|
inventory_sources_qs = self.user.get_queryset(InventorySource)
|
||||||
return qs.filter(inventory_source__in=inventory_sources_qs)
|
return qs.filter(inventory_source__in=inventory_sources_qs)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user