Как правильно описать 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]

Вернуться на верх