1
0
mirror of https://github.com/ansible/awx.git synced 2024-11-01 08:21:15 +03:00

apply listview optimizations to detail view

This commit is contained in:
AlanCoding 2017-11-30 12:22:26 -05:00
parent 451e9a7504
commit e3a731bb9e
No known key found for this signature in database
GPG Key ID: FD2C3C012A72926B
2 changed files with 17 additions and 6 deletions

View File

@ -30,6 +30,7 @@ from rest_framework import views
# AWX
from awx.api.filters import FieldLookupBackend
from awx.main.models import * # noqa
from awx.main.access import access_registry
from awx.main.utils import * # noqa
from awx.main.utils.db import get_all_field_names
from awx.api.serializers import ResourceAccessListElementSerializer
@ -273,12 +274,17 @@ class GenericAPIView(generics.GenericAPIView, APIView):
return serializer
def get_queryset(self):
#if hasattr(self.request.user, 'get_queryset'):
# return self.request.user.get_queryset(self.model)
if self.queryset is not None:
return self.queryset._clone()
elif self.model is not None:
return self.model._default_manager.all()
qs = self.model._default_manager
if self.model in access_registry:
access_class = access_registry[self.model]
if access_class.select_related:
qs = qs.select_related(*access_class.select_related)
if access_class.prefetch_related:
qs = qs.prefetch_related(*access_class.prefetch_related)
return qs
else:
return super(GenericAPIView, self).get_queryset()

View File

@ -946,7 +946,8 @@ class CredentialAccess(BaseAccess):
model = Credential
select_related = ('created_by', 'modified_by',)
prefetch_related = ('admin_role', 'use_role', 'read_role',
'admin_role__parents', 'admin_role__members',)
'admin_role__parents', 'admin_role__members',
'credential_type', 'organization')
def filtered_queryset(self):
return self.model.accessible_objects(self.user, 'read_role')
@ -1147,7 +1148,11 @@ class JobTemplateAccess(BaseAccess):
model = JobTemplate
select_related = ('created_by', 'modified_by', 'inventory', 'project',
'next_schedule',)
prefetch_related = ('credentials__credential_type',)
prefetch_related = (
'instance_groups',
'credentials__credential_type',
Prefetch('labels', queryset=Label.objects.all().order_by('name')),
)
def filtered_queryset(self):
return self.model.accessible_objects(self.user, 'read_role')
@ -1309,7 +1314,7 @@ class JobAccess(BaseAccess):
model = Job
select_related = ('created_by', 'modified_by', 'job_template', 'inventory',
'project', 'job_template',)
'project', 'project_update',)
prefetch_related = (
'unified_job_template',
'instance_group',