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

时间:2018-03-20 02:38:58

标签: django django-rest-framework

我想使用http://xxxxxx/ {id}和http://xxxxxx/ {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'

我该如何解决这个问题?

我是否分开观看?或制作方法视图并包含网址?

1 个答案:

答案 0 :(得分:2)

不要认为在方法中更改lookup_field会起作用。 但是,您可以使用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)