验证pk为int在drf viewset中检索URL

时间:2019-08-05 05:59:24

标签: django python-3.x django-rest-framework drf-extensions

代码如下:

class UserViewSet(ViewSet):

    # ... Many other actions
    def list(self):
        # list implementation

    def retrieve(self, request, pk):
        # manual pk int validation

router = DefaultRouter()
router.register(r"users", UserViewSet, basename="users")
urlpatterns = router.urls

现在,pk未被验证为int,因此向db发出了请求,我想避免这种情况。有什么办法可以在网址中添加这种类型的验证? 我无需使用这样的路由器就可以实现这一点:

urlpatterns = [
    path('users/<int:pk>/', UserViewSet.as_view({'get': 'retrieve'}),
    # many other actions have to be added seperately
]

但是我的观点集中有很多动作,所有这些动作都必须单独添加。有没有更清洁的方法或包装?

1 个答案:

答案 0 :(得分:1)

lookup_value_regex 属性用作

class UserViewSet(ViewSet):
    lookup_value_regex = '\d+'
    ...