diff --git a/awx/api/serializers.py b/awx/api/serializers.py index b000114b94..9be27357f4 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -2232,11 +2232,14 @@ class WorkflowNodeBaseSerializer(BaseSerializer): job_tags = serializers.SerializerMethodField() limit = serializers.SerializerMethodField() skip_tags = serializers.SerializerMethodField() + success_nodes = serializers.PrimaryKeyRelatedField(many=True, read_only=True) + failure_nodes = serializers.PrimaryKeyRelatedField(many=True, read_only=True) + always_nodes = serializers.PrimaryKeyRelatedField(many=True, read_only=True) class Meta: - fields = ('id', 'url', 'related', 'unified_job_template', + fields = ('*', '-name', '-description', 'id', 'url', 'related', + 'unified_job_template', 'success_nodes', 'failure_nodes', 'always_nodes', 'inventory', 'credential', 'job_type', 'job_tags', 'skip_tags', 'limit', 'skip_tags') - read_only_fields = ('success_nodes', 'failure_nodes', 'always_nodes') def get_related(self, obj): res = super(WorkflowNodeBaseSerializer, self).get_related(obj) diff --git a/awx/main/access.py b/awx/main/access.py index f69c4d5093..421e0e73ab 100644 --- a/awx/main/access.py +++ b/awx/main/access.py @@ -1277,6 +1277,7 @@ class WorkflowJobTemplateNodeAccess(BaseAccess): qs = self.model.objects.filter( workflow_job_template__in=WorkflowJobTemplate.accessible_objects( self.user, 'read_role')) + qs = qs.prefetch_related('success_nodes', 'failure_nodes', 'always_nodes') return qs def can_use_prompted_resources(self, data): @@ -1371,6 +1372,8 @@ class WorkflowJobNodeAccess(BaseAccess): qs = self.model.objects.filter( workflow_job__workflow_job_template__in=WorkflowJobTemplate.accessible_objects( self.user, 'read_role')) + qs = qs.select_related('unified_job_template', 'job') + qs = qs.prefetch_related('success_nodes', 'failure_nodes', 'always_nodes') return qs def can_add(self, data):