猿问

无法使用视图名称“book-detail”解析超链接关系的 URL

之前我用过ModelSerializer,没有出现任何错误。当我用HyperlinkedModelSerializer这个错误替换它时抛出了


Could not resolve URL for hyperlinked relationship using view name "book

detail". You may have failed to include the related model in your API,

or incorrectly configured the `lookup_field` attribute on this field.

这是serializers.py文件:


class BookSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:

        model = Book

        fields = ['id', 'url', 'title', 'subtitle', 'isbn']

model.py


class Book(models.Model):

    title = models.CharField(max_length=250)

    subtitle = models.CharField(max_length=250)

    author = models.CharField(max_length=100)

    isbn = models.CharField(max_length=13)


    def __str__(self):

        return self.title

views.py


class BookListView(viewsets.ModelViewSet):

    queryset = Book.objects.all()

    serializer_class = BookSerializer

和urls.py


router = routers.DefaultRouter()

router.register('books', BookListView)



app_name = "books"

urlpatterns = [

    path('', include(router.urls)),

]

视图名称book-detail在我的视图中不存在,可能是 Django 自动创建的,但我不知道在哪里找到并调试它?谢谢。


POPMUISE
浏览 160回答 1
1回答

守候你守候我

我也曾经遇到过这个问题,但我通过这样做解决了:urls.py(项目),您可能需要在根目录中为您的应用程序提供命名空间urls.pypath('your_url', include(('your_app.urls', 'your_app'), namespace="your_app"))serializers.py添加一个HyperlinkedIdentityFieldclass BookSerializer(serializers.HyperlinkedModelSerializer):    # add this     url = serializers.HyperlinkedIdentityField(view_name="your_app:book-detail")    class Meta:        model = Book        fields = ['id', 'url', 'title', 'subtitle', 'isbn']urls.py(应用程序)添加basenamerouter = routers.DefaultRouter()# add basenamerouter.register('books', BookListView, basename="books")文档https://www.django-rest-framework.org/tutorial/5-relationships-and-hyperlinked-apis/
随时随地看视频慕课网APP

相关分类

Python
我要回答