猿问

StringRelatedField 不起作用,如官方教程中所示

我在https://www.django-rest-framework.org/api-guide/relations/浏览了“序列化程序关系”,并在 StringRelatedField 关系字段上遇到了一些问题。所以,在那个教程中,他们给出了models.py 和serializers.py。我添加了 views.py 和 urls.py。我的意见.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 shell 命令,我创建了一个专辑和轨道对象,如下所示:


>>> 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 方法来显示对象表示。但在我的情况下,它显示“轨道对象 (2)”和“轨道对象 (3)”而不是轨道的编号和标题。有人可以帮忙吗?注意:我使用的 models.py 和 serializers.py 与教程中的完全相同。


MM们
浏览 319回答 1
1回答

呼如林

要解决此问题,您只需__str__在模型中添加一个方法,如下所示:def __str__(self):&nbsp; &nbsp; return f'{self.number}: {self.title}'&nbsp;
随时随地看视频慕课网APP

相关分类

Python
我要回答