为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

POPMUISE 2023-10-26 16:52:09
之前我用过ModelSerializer,没有出现任何错误。当我用HyperlinkedModelSerializer这个错误替换它时抛出了Could not resolve URL for hyperlinked relationship using view name "bookdetail". 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.pyclass 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.titleviews.pyclass BookListView(viewsets.ModelViewSet):    queryset = Book.objects.all()    serializer_class = BookSerializer和urls.pyrouter = routers.DefaultRouter()router.register('books', BookListView)app_name = "books"urlpatterns = [    path('', include(router.urls)),]视图名称book-detail在我的视图中不存在,可能是 Django 自动创建的,但我不知道在哪里找到并调试它?谢谢。
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

我也曾经遇到过这个问题,但我通过这样做解决了:


urls.py(项目),

您可能需要在根目录中为您的应用程序提供命名空间urls.py


path('your_url', include(('your_app.urls', 'your_app'), namespace="your_app"))

serializers.py

添加一个HyperlinkedIdentityField


class 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(应用程序)

添加basename


router = routers.DefaultRouter()

# add basename

router.register('books', BookListView, basename="books")

文档https://www.django-rest-framework.org/tutorial/5-relationships-and-hyperlinked-apis/


查看完整回答
反对 回复 2023-10-26
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信