class JobBaseSerializer(serializers.ModelSerializer): env_node = serializers.SerializerMethodField() is_linked = serializers.SerializerMethodField() artifacts = serializers.SerializerMethodField() project = serializers.SerializerMethodField() duration = PTDurationField() def get_is_linked(self, job): return job.regression_linked is not None def get_project(self, job): return ProjectSerializer(job.project).data def get_env_node(self, job): # this function is required to apply 'parent=None' filter because env_node children will be # populated by the EnvNodeNestedSerializer objs = EnvNodeModel.objects.filter(job=job.id, parent=None).all() if isinstance(self, JobSimpleSerializer): return EnvNodeSimpleSerializer(objs, many=True).data else: return EnvNodeNestedSerializer(objs, many=True).data def get_artifacts(self, job): objs = ArtifactLinkModel.objects.filter(linked_uuid=job.uuid, deleted=False).all() artifacts = [] for obj in objs: try: artifacts.append(obj.artifact) except ArtifactMetaModel.DoesNotExist: continue return ArtifactMetaSerializer(artifacts, many=True).data
class TestSimpleSerializer(serializers.ModelSerializer): duration = PTDurationField() avg_score = PTRoundedFloatMKField() avg_plusmin = PTRoundedFloatField() class Meta: model = TestModel fields = ('id', 'seq_num', 'group', 'tag', 'category', 'duration', 'avg_score', 'avg_plusmin')
class JobBaseSerializer(serializers.ModelSerializer): env_node = serializers.SerializerMethodField() duration = PTDurationField() def get_env_node(self, job): # this function is required to apply 'parent=None' filter because env_node children will be # populated by the EnvNodeNestedSerializer objs = EnvNodeModel.objects.filter(job=job.id, parent=None).all() if isinstance(self, JobSimpleSerializer): return EnvNodeSimpleSerializer(objs, many=True).data else: return EnvNodeNestedSerializer(objs, many=True).data