Как правильно описать Django serializers
Имеем приложение на django 3 и DRF. Api на DRF возвращает ответ вида, где file_list это список primary_key связанной модели: Вывод представления MmgDatasetDetailView
"id": 73,
"name": "Some_name",
"comment": "z",
"file_list": [
11508,
11509,
... }
Вопрос: Как вместо pk внутри поля file_list получить структуру полей связанной модели? Например:
{
"id": 73,
"name": "Some_name",
"comment": "z",
"file_list": [{
"id": 11508,
"study_uid": "12345",
"path": "/path/to/file/file_11508.dcm",
"side": "L",
"projection": "Z"},
"id": 11509,
"study_uid": "12345",
"path": "/path/to/file/file_11509.dcm",
"side": "L",
"projection": "Z"}
]
}
Структура приложений проекта: project:
- api
- mmg
mmg/models.py
class MmgFile(models.Model):
study_uid = models.CharField(max_length=150, verbose_name="Study Instance UID")
path = models.CharField(max_length=300, verbose_name="путь к файлу")
side = models.CharField(max_length=1, verbose_name="сторона")
projection = models.CharField(max_length=3, verbose_name="проекция")
class MmgDataset(models.Model):
name = models.CharField(max_length=50, name="name", verbose_name="имя датасета")
file_list = models.ManyToManyField(MmgFile)
comment = models.TextField(max_length=100, name="comment", null=True)
mmg/serializers.py
from .models import MmgDataset, MmgFile
class MmgFileSerializer(serializers.ModelSerializer):
class Meta:
model = MmgFile
fields = [field.name for field in MmgFile._meta.fields]
class MmgDatasetSerializer(serializers.ModelSerializer):
class Meta:
model = MmgDataset
fields = [field.name for field in MmgDataset._meta.fields]
fields.append('file_list')
api/views.py
from .permissions import AllowAll
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
from mmg.serializers import MmgDatasetSerializer, MmgFileSerializer
from mmg.models import MmgDataset, MmgFile
...
class MmgDatasetDetailView(generics.RetrieveAPIView):
queryset = MmgDataset.objects.all()
serializer_class = MmgDatasetSerializer
permission_classes = [AllowAll]