Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python StringRelatedField未按官方教程中所示工作_Python_Django_Django Rest Framework_Relational_Serialization - Fatal编程技术网

Python StringRelatedField未按官方教程中所示工作

Python StringRelatedField未按官方教程中所示工作,python,django,django-rest-framework,relational,serialization,Python,Django,Django Rest Framework,Relational,Serialization,我在上查看了“序列化器关系”,发现StringRelatedField关系字段存在一些问题。 因此,在该教程中,他们给出了models.py和serializers.py。我添加了views.py和url.py。 My views.py: # views.py from django.shortcuts import render from music.models import Album, Track from music.serializers import AlbumSeriali

我在上查看了“序列化器关系”,发现StringRelatedField关系字段存在一些问题。 因此,在该教程中,他们给出了models.py和serializers.py。我添加了views.py和url.py。 My 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
My URL.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)
但当我运行服务器时,我会得到以下结果:

{
     ...
        "album_name": "Desert",
        "artist": "Beduin",
        "tracks": [
            "Track object (2)",
            "Track object (3)"
        ]
    ...
}
我认为StringRelatedField使用unicode方法来显示对象表示。但在我的例子中,它说的是“轨迹对象(2)”和“轨迹对象(3)”,而不是轨迹的编号和标题。 有人能帮忙吗?
注意:我使用的models.py和serializers.py与本教程中的完全相同。

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

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

只需将
\u str\u(self):
方法添加到您的模型中,其中使smth类似:
返回f'{self.number}:{self.title}'
文档页面严重过时
\uuuunicode\uuuu
方法仅适用于Python2,它与Django的任何最新版本都不兼容。正如Chiefir所说,使用
\uu str\uu
@Chiefir:谢谢。它是有效的:)@DanielRoseman:谢谢,还有:)我已经建立了一个PR来修复那些文档。
def __str__(self):
    return f'{self.number}: {self.title}'