【问题标题】:List_rount doesn't work in Django-rest-frameworkList_rount 在 Django-rest-framework 中不起作用
【发布时间】:2015-08-29 08:39:21
【问题描述】:

根据这个链接http://www.django-rest-framework.org/api-guide/routers/

class UserViewSet(ModelViewSet):
    ...

    @detail_route(methods=['post'], permission_classes=[IsAdminOrIsSelf])
    def set_password(self, request, pk=None):

将另外生成以下 URL 模式:

  • 网址格式:^users/{pk}/set_password/$ 名称:'user-set-password'

这是我的代码:

我想生成^calendars/{pk}/events/$ URL 模式。但是它根据下面的错误页面生成了^calendars/events/{pk}/$

那么问题出在哪里?

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    您在代码中使用了错误的装饰器。你想要@detail_route,而不是@list_route@list_route 不接受 pk,因此生成 /calendars/events/

    你的方法应该这样装饰:

    @detail_route(methods=['get'])
    def events(self, request, pk=None):
        ...
    

    【讨论】:

    • 我想通过^calendars/{pk}/events/$获取事件列表,而不仅仅是一个事件。如果@list_route 不接受pk,如何实现这个URL模式?
    • @detail_route 接受 pk 并生成您想要的 url。我添加了一个代码示例。
    • 它可以工作,但仍然很困惑,因为我想要一个列表但一个项目的详细信息。
    • list_route 和 detail_route 仅区分路由器将为您生成的 url 类型。更深入的解释可以在这里找到:django-rest-framework.org/api-guide/viewsets/…
    • 知道了,非常感谢。还有一个问题,我可以用 detail_route 或 list_route 生成^calendars/{calendar_pk}/events/{event_pk}/$ 模式吗?我在官方网站上没有找到相关主题。
    猜你喜欢
    • 2019-09-15
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    相关资源
    最近更新 更多