如何获取传递给Django restapi的ID?

2024-10-08 23:23:46 发布

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

我正在构建一个Django应用程序,它公开了一个restapi,用户可以通过它查询我的应用程序的模型。我按照指示here。在

我的路线在我的应用程序里是这样的网址.py公司名称:

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

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

^{pr2}$

我的视图集如下所示:

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

当我点击/api/myObjects/60/时,从视图集的第一行得到以下错误:

name 'self' is not defined

为什么??如何在视图集中获取60的ID并获取具有该ID的MyObject?在


Tags: django用户模型selfapirestapiid应用程序
3条回答

我会使用ViewSet作为对ModelViewSet的反对。下面的代码应该能满足您的需要,除非有足够的理由使用ModelViewSet。如果转到URL,比如http://yourdomain/yourmodel/10,那么pk变量的值将为10。在

class YourModelViewSet(viewsets.ViewSet):

     def retrieve(self,request,pk=None):
         u = request.user
         queryset = YourModel.objects.filter(user=u,pk=pk)
         if not queryset:
             return Response(status=status.HTTP_400_BAD_REQUEST)
         else:
             serializer = YourModelSerializer(queryset)
             return Response(serializer.data,status=status.HTTP_200_OK)

谢谢-希望有帮助

您的记录器行引用self,但在该上下文中没有self(您处于类级别,而不是方法内部)。尝试移除记录器线路。在

因为您使用的是viewsets.ModelViewSet,Django Rest框架为您处理所有特定对象的过滤。将您的queryset属性更改为MyObjects.objects.all()。在

按照其他人的建议重写queryset将破坏/myObjects/路由,因为id不存在。在

相关问题 更多 >

    热门问题