|
1 | 1 | from __future__ import annotations |
| 2 | +import inspect |
2 | 3 |
|
3 | 4 | from django.db.models import QuerySet |
4 | 5 | from rest_framework.decorators import action |
5 | 6 | from rest_framework.response import Response |
6 | 7 | from rest_framework.viewsets import ReadOnlyModelViewSet |
| 8 | +from rest_framework.serializers import ModelSerializer |
7 | 9 |
|
8 | 10 | from uvdat.core.models import Project, TaskResult |
9 | 11 | import uvdat.core.rest.serializers as uvdat_serializers |
@@ -34,7 +36,14 @@ def list_types(self, request, project_id: int, **kwargs): |
34 | 36 | for k, v in instance.get_input_options().items(): |
35 | 37 | if isinstance(v, QuerySet): |
36 | 38 | filtered_queryset = v.filter_by_projects(Project.objects.filter(id=project_id)) |
37 | | - options = [{"id": o.id, "name": o.name} for o in filtered_queryset] |
| 39 | + input_serializer = next(iter([ |
| 40 | + s for _, s in inspect.getmembers(uvdat_serializers, inspect.isclass) |
| 41 | + if issubclass(s, ModelSerializer) and s.Meta.model == filtered_queryset.model |
| 42 | + ]), None) |
| 43 | + if input_serializer is not None: |
| 44 | + options = [input_serializer(o).data for o in filtered_queryset] |
| 45 | + else: |
| 46 | + options = [{"id": o.id, "name": o.name} for o in filtered_queryset] |
38 | 47 | elif any(not isinstance(o, dict) for o in v): |
39 | 48 | options = [{"id": o, "name": o} for o in v] |
40 | 49 | else: |
|
0 commit comments