diff --git a/awx/api/serializers.py b/awx/api/serializers.py index a8aa9eca38..74f642e689 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -2504,16 +2504,15 @@ class JobEventSerializer(BaseSerializer): def get_related(self, obj): res = super(JobEventSerializer, self).get_related(obj) res.update(dict( - job = reverse('api:job_detail', args=(obj.job.pk,)), - #children = reverse('api:job_event_children_list', args=(obj.pk,)), + job = reverse('api:job_detail', args=(obj.job_id,)), )) - if obj.parent: - res['parent'] = reverse('api:job_event_detail', args=(obj.parent.pk,)) - if obj.children.count(): + if obj.parent_id: + res['parent'] = reverse('api:job_event_detail', args=(obj.parent_id,)) + if obj.children.exists(): res['children'] = reverse('api:job_event_children_list', args=(obj.pk,)) - if obj.host: - res['host'] = reverse('api:host_detail', args=(obj.host.pk,)) - if obj.hosts.count(): + if obj.host_id: + res['host'] = reverse('api:host_detail', args=(obj.host_id,)) + if obj.hosts.exists(): res['hosts'] = reverse('api:job_event_hosts_list', args=(obj.pk,)) return res diff --git a/awx/api/views.py b/awx/api/views.py index 12f302201d..f0d1d3fc75 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -3504,6 +3504,17 @@ class JobJobEventsList(BaseJobEventsList): parent_model = Job + def get_queryset(self): + job = self.get_parent_object() + self.check_parent_access(job) + qs = job.job_events.all() + qs = qs.select_related('host') + qs = qs.prefetch_related('hosts', 'children') + if self.request.user.is_superuser or self.request.user.is_system_auditor: + return qs.all() + host_qs = self.request.user.get_queryset(Host) + return qs.filter(Q(host__isnull=True) | Q(host__in=host_qs)) + class JobJobPlaysList(BaseJobEventsList):