首页 > 解决方案 > 嵌套 URL - Django-Rest-Framework 无法解析超链接关系的 url

问题描述

我在为一个小项目创建 API 时遇到了一个问题。

当我试图获取楼层的自我网址时。它给ImproperlyConfigured at /api/v1/projects/d5471eb5-de66-478f-8ba8-e820ba4a0662/floors/864bfe52-157d-4667-98a1-279b552e64d6/ Could not resolve URL for hyperlinked relationship using view name "apis:floor-detail". You may have failed to include the related model in your API, or incorrectly configured the 'lookup_field' attribute on this field.

# url.py
urlpatterns = format_suffix_patterns(
    [
        path(r"projects/", views.ProjectView.as_view(), name="project-list"),
        path(
            r"projects/<project_id>/",
            views.ProjectView.as_view(),
            name="project-detail",
        ),
        path(
            r"projects/<project_id>/floors/",
            views.FloorView.as_view(),
            name="floor-list",
        ),
        path(
            r"projects/<uuid:project_id>/floors/<uuid:floor_id>/",
            views.FloorView.as_view(),
            name="floor-detail",
        ),
]
class FloorSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Floor
        fields = ("url","floor_name", "elevation", "project_id")
        extra_kwargs = {
            "url": {
                "view_name": "apis:floor-detail",
                "lookup_field": "floor_id",
            },
            "project_id": {
                "view_name": "apis:project-detail",
                "lookup_field": "project_id"
            }
        }

我认为这可能是 url 设置问题,因为当我将 url.py 更改为

# url.py
urlpatterns = format_suffix_patterns(
    [
        path(r"projects/", views.ProjectView.as_view(), name="project-list"),
        path(
            r"projects/<project_id>/",
            views.ProjectView.as_view(),
            name="project-detail",
        ),
        path(
            r"projects/<project_id>/floors/",
            views.FloorView.as_view(),
            name="floor-list",
        ),
        path(
            r"floors/<uuid:floor_id>/",
            views.FloorView.as_view(),
            name="floor-detail",
        ),
]

它工作正常。有人可以帮忙吗?

标签: pythondjango-rest-frameworkbackend

解决方案


推荐阅读