继续获取"无法使用视图名称"歌曲"解析超链接关系的URL

时间:2016-12-24 00:04:25

标签: python django django-rest-framework

我有以下模型类:

# 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)),
]

2 个答案:

答案 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。必填。