我使用Django Rest Framework视图集和路由器设置一个url,并尝试让url接受两个值:首先,通过user id
过滤对象,然后根据对象的id(在我的例子中,对象来自一个名为Request的模型)例如,mysite.com/api/requestsbyuser/1/
将返回user 1
的所有Request
对象,并且mysite.com/api/requestsbyuser/1/23/
将为user 1
返回带有pk=23
的Request
对象。在
现在我有:
# 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只传入user_id
时,这对于列出所有Request
对象非常有效。但是当我试图转到mysite.com/api/requestsbyuser/1/23/
时,我得到了一个错误:
invalid literal for int() with base 10: '1/23'
。在
Django调试表明我的URLConf中有以下四种url模式:
^{pr2}$我错过什么了吗?我原以为DRF路由器会用单个对象主键值来处理url路径,但它似乎把前缀后面的url当作一个整数来处理,而忽略了/
。在
一个想法:您是否尝试在regex中使用}?在
\d+
而不是{它应该强制}
user_id
为一个数字,从而避免得到{相关问题 更多 >
编程相关推荐