我有以下模型类:
# Song Model
class Song(models.Model):
title = models.CharField(max_length=200)
artist = models.CharField(max_length=200)
content = models.TextField()
user = models.ForeignKey('auth.User', related_name='songs')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self): # __unicode__ on Python 2
return self.title + ' ' + self.artist
class Meta:
ordering = ('title',)
我的序列化程序
class SongSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
fields = ('id', 'title', 'artist', 'content')
model = Song
class UserSerializer(serializers.ModelSerializer):
songs = serializers.HyperlinkedRelatedField(
many=True, read_only=True,
view_name='songs'
)
class Meta:
model = User
fields = '__all__'
和我的观点
class SongViewSet(viewsets.ModelViewSet):
queryset = Song.objects.all()
serializer_class = SongSerializer
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
我正在尝试获取歌曲列表,但我一直收到此错误 配置不正确:无法使用视图名称解析超链接关系的URL"歌曲"
这一直与PrimaryKeyRelatedField合作 但不像现在这样。
路由文件以供参考:
router = DefaultRouter()
router.register(r'songs', views.SongViewSet)
router.register(r'users', views.UserViewSet)
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/', include(router.urls)),
]
答案 0 :(得分:0)
好吧,我能够使用
view_name='song-detail'
如果有人想解释它的工作原理,请随意
答案 1 :(得分:0)
我是Django的新手,但我也遇到过同样的问题。我想因为路由器前缀,param不是视图名称。
Documentation for the router说:
上面的示例将生成以下URL模式:
URL模式:^ users / $名称:'user-list'
URL模式:^ users / {pk} / $名称:'user-detail'
URL模式:^ accounts / $名称:'account-list'
网址格式:^ accounts / {pk} / $名称:'account-detail'
Documentation for the serializer说:
view_name -应该用作关系目标的视图名称。如果您使用的是标准路由器类,则该字符串将采用以下格式
Encoding.Unicode
。必填。