StringRelatedField 不工作,如官方教程所示
StringRelatedField does not working as shown in the official tutorial
我在 https://www.django-rest-framework.org/api-guide/relations/ 完成了 "Serializer relations" 并遇到了 StringRelatedField 关系字段的一些问题。
因此,在该教程中,他们给出了 models.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 shell 命令,我创建了一个专辑和曲目 object,如下所示:
>>> 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 方法来显示object 表示。但就我而言,它显示 "Track object (2)" 和 "Track object (3)" 而不是轨道的编号和标题。
有人可以帮忙吗?
注意:我使用的 models.py 和 serializers.py 与教程中的完全相同。
要解决这个问题,您只需在模型中添加一个 __str__
方法,如下所示:
def __str__(self):
return f'{self.number}: {self.title}'
我在 https://www.django-rest-framework.org/api-guide/relations/ 完成了 "Serializer relations" 并遇到了 StringRelatedField 关系字段的一些问题。 因此,在该教程中,他们给出了 models.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 shell 命令,我创建了一个专辑和曲目 object,如下所示:
>>> 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 方法来显示object 表示。但就我而言,它显示 "Track object (2)" 和 "Track object (3)" 而不是轨道的编号和标题。 有人可以帮忙吗? 注意:我使用的 models.py 和 serializers.py 与教程中的完全相同。
要解决这个问题,您只需在模型中添加一个 __str__
方法,如下所示:
def __str__(self):
return f'{self.number}: {self.title}'