如何根据API参数将Django查询集派生到REST请求?

2024-04-20 03:13:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个Django应用程序,它公开了一个restapi,用户可以通过它来查询我的应用程序模型。我按照说明[这里][1]。你知道吗

我想这样做,当API端点/API/myObject/60/被命中时,它应该返回ID==60的lookup myObject,然后返回getCustomMyObjectsList()的值,这是myObject的一个方法。但我已经绕了2-3天的圈子,想知道怎么做。你知道吗

我的路线在我的应用程序中是这样的网址.py地址:

from rest_framework import routers
router = routers.DefaultRouter()    router.register(r'myObjects/(?P<id>\d+)/?$', views.MyObjectsViewSet)
url(r'^api/', include(router.urls)),

我的序列化程序如下所示:

class MyObjectSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = MyObject
    fields = ('id', 'name',)

我的视图集如下所示:

class MyObjectsViewSet(viewsets.ModelViewSet):
    queryset = MyObjects.objects.get(pk=self.kwargs['id']).getCustomMyObjectsList()
    serializer_class = MyObjectSerializer

当我点击/api/myObjects/60/时,Viewset的第一行出现以下错误:

name 'self' is not defined

为什么??如何在视图集中获取ID为60的对象并获取具有该ID的MyObject? 有人能告诉我在MyObjectViewSet()中需要编写的确切代码吗?你知道吗

谢谢


Tags: nameapiid应用程序classrouterroutersmyobject
1条回答
网友
1楼 · 发布于 2024-04-20 03:13:50

self是对对象实例的引用,在定义类变量时不可用。您应该重写get_queryset方法来实现您的目标,其中请求对象可以通过访问self.request获得。你知道吗

有关更多详细信息,请查看http://www.django-rest-framework.org/api-guide/filtering

相关问题 更多 >