11from __future__ import annotations
22
3+ import inspect
4+
35from django .db .models import QuerySet
46from rest_framework .decorators import action
57from rest_framework .response import Response
8+ from rest_framework .serializers import ModelSerializer
69from rest_framework .viewsets import ReadOnlyModelViewSet
710
811from uvdat .core .models import Project , TaskResult
@@ -34,7 +37,21 @@ def list_types(self, request, project_id: int, **kwargs):
3437 for k , v in instance .get_input_options ().items ():
3538 if isinstance (v , QuerySet ):
3639 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 ]
40+ input_serializer = next (
41+ iter (
42+ [
43+ s
44+ for _ , s in inspect .getmembers (uvdat_serializers , inspect .isclass )
45+ if issubclass (s , ModelSerializer )
46+ and s .Meta .model == filtered_queryset .model
47+ ]
48+ ),
49+ None ,
50+ )
51+ if input_serializer is not None :
52+ options = [input_serializer (o ).data for o in filtered_queryset ]
53+ else :
54+ options = [{"id" : o .id , "name" : o .name } for o in filtered_queryset ]
3855 elif any (not isinstance (o , dict ) for o in v ):
3956 options = [{"id" : o , "name" : o } for o in v ]
4057 else :
@@ -45,6 +62,7 @@ def list_types(self, request, project_id: int, **kwargs):
4562 "name" : instance .name ,
4663 "db_value" : instance .db_value ,
4764 "description" : instance .description ,
65+ "details" : instance .details ,
4866 "attribution" : instance .attribution ,
4967 "input_options" : filtered_input_options ,
5068 "input_types" : instance .input_types ,
0 commit comments