Django 我想用http://xxxxxx/{id}和http://xxxxxx/{md5}一起

Django 我想用http://xxxxxx/{id}和http://xxxxxx/{md5}一起,django,django-rest-framework,Django,Django Rest Framework,我想使用{id}和{md5} 我认为它是这样工作的 class ItemViewSEt(viewsets.ModelVieSet): queryset = item.objects.all() serializer_class = ItemSerializer permission_classes = [AllowAny] lookup_field = 'id' @detail_route(methods=['GET'], permission_clas

我想使用{id}和{md5}

我认为它是这样工作的

class ItemViewSEt(viewsets.ModelVieSet):
    queryset = item.objects.all()
    serializer_class = ItemSerializer
    permission_classes = [AllowAny]
    lookup_field = 'id'

    @detail_route(methods=['GET'], permission_classes=[AllowAny])
    def test(self, request):
        self.lookup_field = 'md5'
但它不适用于以下错误

check()获得意外的关键字参数“pk”

我怎样才能解决这个问题


我要分开视图集吗?或者创建方法视图并包含url?

不要认为在方法中更改
查找\u字段
会起作用。 但是,您可以使用md5进行查询,并从该方法返回响应

默认情况下,
detail_route
pk
添加为可重复使用的参数

因此示例代码是

@detail_route(methods=['GET'], permission_classes=[AllowAny])
    def test(self, request, pk=None):
        obj = Item.objects.get(md5=pk)
        ser = ItemSerializer(obj)
        return Response(ser.data)

这是否会使
URLDispatcher
产生歧义?更具体地说,如何区分
/test/123/
/test/d926d7bb9ccf46fc04a61bd65d87b9b3/
?@JerinterGeorge url regex应该能够做到这一点
\w+
也将匹配所有整数,对吗?那么,你能展示一些例子吗?@JerinterGeorge,我没有例子,但是你可以命令定义这些URL和它们的正则表达式来实现OP想要的。