首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Rest框架路由器URL中的多个整数参数

Django Rest框架路由器URL中的多个整数参数
EN

Stack Overflow用户
提问于 2018-01-25 07:26:58
回答 2查看 4.7K关注 0票数 3

我正在使用Django Rest Framework和路由器设置一个url,并试图让url接受两个值:首先,通过user id过滤对象,然后通过对象的id过滤对象。(在我的例子中,对象来自一个名为Request的模型。)例如,mysite.com/api/requestsbyuser/1/将返回user 1的所有Request对象,而mysite.com/api/requestsbyuser/1/23/将返回pk=23 For user 1Request对象。

现在我有:

代码语言:javascript
复制
# urls.py

from django.conf.urls import url, include
from rest_framework import routers
from . import views

router = routers.DefaultRouter()
router.register(prefix=r'requestsbyuser/(?P<user_id>.+)', viewset=views.RequestsByUser, base_name='request')

urlpatterns = [
    url(r'^', include(router.urls)),
]

# views.py

class RequestsByUser(viewsets.ModelViewSet):
    serializer_class = RequestsSerializer

    def get_queryset(self):
        u_id = self.kwargs['user_id']
        return Request.objects.filter(user_id=u_id)

当url只在Request中传递时,这对于列出所有的user_id对象都很有效。但是,当我尝试去mysite.com/api/requestsbyuser/1/23/时,我会得到一个错误:invalid literal for int() with base 10: '1/23'

Django调试说在我的URLConf中有以下四种url模式:

代码语言:javascript
复制
^api/ ^ ^requestsbyuser/(?P<user_id>.+)/$ [name='request-list']
^api/ ^ ^requestsbyuser/(?P<user_id>.+)\.(?P<format>[a-z0-9]+)/?$ [name='request-list']
^api/ ^ ^requestsbyuser/(?P<user_id>.+)/(?P<pk>[^/.]+)/$ [name='request-detail']
^api/ ^ ^requestsbyuser/(?P<user_id>.+)/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='request-detail']

我是不是遗漏了什么?我认为DRF路由器会处理带有单个对象主键值的url路径,但它似乎将前缀后面的url作为一个整数来处理,而忽略了/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-25 08:43:33

只是一个想法:在regex中,您尝试使用\d+而不是.+吗?

代码语言:javascript
复制
router.register(prefix=r'requestsbyuser/(?P<user_id>\d+)', viewset=views.RequestsByUser, base_name='request')

它应该强制user_id是一个数字,从而避免获得1/23

票数 7
EN

Stack Overflow用户

发布于 2021-03-13 06:19:59

在DefaultRouter的情况下,只能在前缀后面使用一个参数。否则,您应该使用动作装饰。医生这么说的。

代码语言:javascript
复制
router.register(r'users', UserViewSet)

会产生

  • URL模式:^user/$ Name:‘users’
  • URL模式:^user/{pk}/$名称:“用户详细信息”

https://www.django-rest-framework.org/api-guide/routers/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48437653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档