diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 2845328bad..5a3691efe2 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -2958,6 +2958,10 @@ class ActivityStreamSerializer(BaseSerializer): changes = serializers.SerializerMethodField() object_association = serializers.SerializerMethodField() + # Needed related fields that are not in the default summary fields + extra_listing = [ + ('workflow_job_template_node', ('id', 'unified_job_template_id')) + ] class Meta: model = ActivityStream @@ -2999,7 +3003,7 @@ class ActivityStreamSerializer(BaseSerializer): rel = {} if obj.actor is not None: rel['actor'] = reverse('api:user_detail', args=(obj.actor.pk,)) - for fk, __ in SUMMARIZABLE_FK_FIELDS.items(): + for fk, __ in SUMMARIZABLE_FK_FIELDS.items() + self.extra_listing: if not hasattr(obj, fk): continue allm2m = getattr(obj, fk).all() @@ -3021,7 +3025,7 @@ class ActivityStreamSerializer(BaseSerializer): def get_summary_fields(self, obj): summary_fields = OrderedDict() - for fk, related_fields in SUMMARIZABLE_FK_FIELDS.items(): + for fk, related_fields in SUMMARIZABLE_FK_FIELDS.items() + self.extra_listing: try: if not hasattr(obj, fk): continue diff --git a/awx/api/views.py b/awx/api/views.py index bf59089cdf..15e66baed5 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -3107,7 +3107,7 @@ class WorkflowJobTemplateActivityStreamList(WorkflowsEnforcementMixin, ActivityS self.check_parent_access(parent) qs = self.request.user.get_queryset(self.model) return qs.filter(Q(workflow_job_template=parent) | - Q(workflow_job_template_node__workflow_job_template=parent)) + Q(workflow_job_template_node__workflow_job_template=parent)).distinct() class WorkflowJobList(WorkflowsEnforcementMixin, ListCreateAPIView): diff --git a/awx/main/access.py b/awx/main/access.py index 196d58b6c6..2c0fdd677c 100644 --- a/awx/main/access.py +++ b/awx/main/access.py @@ -2101,7 +2101,7 @@ class ActivityStreamAccess(BaseAccess): 'job_template', 'job', 'ad_hoc_command', 'notification_template', 'notification', 'label', 'role', 'actor', 'schedule', 'custom_inventory_script', 'unified_job_template', - 'workflow_job_template', 'workflow_job') + 'workflow_job_template', 'workflow_job', 'workflow_job_template_node') if self.user.is_superuser or self.user.is_system_auditor: return qs.all() diff --git a/awx/main/models/__init__.py b/awx/main/models/__init__.py index 3f7e309940..d7b65d8107 100644 --- a/awx/main/models/__init__.py +++ b/awx/main/models/__init__.py @@ -126,4 +126,5 @@ activity_stream_registrar.connect(Notification) activity_stream_registrar.connect(Label) activity_stream_registrar.connect(User) activity_stream_registrar.connect(WorkflowJobTemplate) +activity_stream_registrar.connect(WorkflowJobTemplateNode) activity_stream_registrar.connect(WorkflowJob)