为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MM们 2021-10-26 18:46:51
我在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.pyfrom django.urls import pathfrom rest_framework.urlpatterns import format_suffix_patternsfrom music import viewsurlpatterns = [    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 与教程中的完全相同。
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

要解决此问题,您只需__str__在模型中添加一个方法,如下所示:


def __str__(self):

    return f'{self.number}: {self.title}' 


查看完整回答
反对 回复 2021-10-26
  • 1 回答
  • 0 关注
  • 309 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信