Я прошел через «Связи сериализатора» по адресу https://www.django -rest-framework.org / api-guide / Relations / и получил некоторые проблемы с реляционным полем StringRelatedField.Итак, в этом уроке они дали модели.py и serializers.py.Я добавил views.py и urls.py.Мои views.py:
# views.py
from django.shortcuts import render
from music.models import Album, Track
from music.serializers import AlbumSerializer
from rest_framework import generics
class AlbumList(generics.ListCreateAPIView):
queryset = Album.objects.all()
serializer_class = AlbumSerializer
class AlbumDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Album.objects.all()
serializer_class = AlbumSerializer
Мои urls.py:
# urls.py
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from music import views
urlpatterns = [
path('music/', views.AlbumList.as_view()),
path('music/<int:pk>/', views.AlbumDetail.as_view(), name='track-detail'),
]
urlpatterns = format_suffix_patterns(urlpatterns)
С помощью команды оболочки python manage.py я создал объект альбома и трека, как показано ниже:
>>> from music.models import Album, Track
>>> from music.serializers import AlbumSerializer
>>> album = Album(album_name="Desert", artist="Beduin")
>>> album.save()
>>> track = Track(album=album, order=1, title="Finding Water", duration="2" )
>>> track.save()
>>> track = Track(album=album, order=2, title="My Camel", duration="2" )
>>> track.save()
Но когда я запускаю сервер, я получаю следующее:
{
...
"album_name": "Desert",
"artist": "Beduin",
"tracks": [
"Track object (2)",
"Track object (3)"
]
...
}
Я думал, что StringRelatedField использует метод unicode для отображения представления объекта.Но в моем случае вместо номера и названия трека написано «Track object (2)» и «Track object (3)».Может кто-нибудь помочь?ПРИМЕЧАНИЕ: используемые мной модели.py и serializers.py точно такие же, как в учебнике.