StringRelatedField не работает, как показано в официальном руководстве - PullRequest
0 голосов
/ 01 февраля 2019

Я прошел через «Связи сериализатора» по адресу 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 точно такие же, как в учебнике.

1 Ответ

0 голосов
/ 01 февраля 2019

Чтобы решить эту проблему, вы можете просто добавить метод __str__ к вашей модели, например:

def __str__(self):
    return f'{self.number}: {self.title}' 
...