mirror of
https://github.com/ansible/awx.git
synced 2026-01-17 12:41:19 -03:30
AC-655 Add select_related to reduce number of queries for inventory views.
This commit is contained in:
parent
dc4b7d0960
commit
f29809a807
@ -570,6 +570,7 @@ class GroupTreeSerializer(GroupSerializer):
|
||||
if obj is None:
|
||||
return {}
|
||||
children_qs = obj.children.filter(active=True)
|
||||
children_qs = children_qs.select_related('inventory', 'inventory_source')
|
||||
return GroupTreeSerializer(children_qs, many=True).data
|
||||
|
||||
|
||||
|
||||
@ -790,6 +790,7 @@ class InventoryTreeView(RetrieveAPIView):
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
inventory = self.get_object()
|
||||
groups_qs = inventory.root_groups.filter(active=True)
|
||||
groups_qs = groups_qs.select_related('inventory', 'inventory_source')
|
||||
data = GroupTreeSerializer(groups_qs, many=True).data
|
||||
return Response(data)
|
||||
|
||||
|
||||
@ -389,7 +389,7 @@ class GroupAccess(BaseAccess):
|
||||
|
||||
def get_queryset(self):
|
||||
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')
|
||||
inventories_qs = self.user.get_queryset(Inventory)
|
||||
return qs.filter(inventory__in=inventories_qs)
|
||||
@ -443,7 +443,7 @@ class InventorySourceAccess(BaseAccess):
|
||||
|
||||
def get_queryset(self):
|
||||
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)
|
||||
return qs.filter(Q(inventory__in=inventories_qs) |
|
||||
Q(group__inventory__in=inventories_qs))
|
||||
@ -482,7 +482,8 @@ class InventoryUpdateAccess(BaseAccess):
|
||||
|
||||
def get_queryset(self):
|
||||
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)
|
||||
return qs.filter(inventory_source__in=inventory_sources_qs)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user