Saq*_*Ali 2 python django rest
我正在构建一个Django应用程序,它公开了一个REST API,用户可以通过它查询我的应用程序的模型.我按照这里的说明操作.
我的路线在myApp的url.py中看起来像这样:
from rest_framework import routers
router = routers.DefaultRouter() router.register(r'myObjects/(?P<id>\d+)/?$', views.MyObjectsViewSet)
url(r'^api/', include(router.urls)),
Run Code Online (Sandbox Code Playgroud)
我的Serializer看起来像这样:
class MyObjectSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = MyObject
fields = ('id', 'name',)
Run Code Online (Sandbox Code Playgroud)
我的Viewset看起来像这样:
class MyObjectsViewSet(viewsets.ModelViewSet):
queryset = MyObjects.objects.get(pk=self.kwargs['id'])
serializer_class = MyObjectSerializer
Run Code Online (Sandbox Code Playgroud)
当我点击/ api/myObjects/60 /我从Viewset的第一行得到以下错误:
name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)
为什么??如何在视图集中获取60的ID并获取具有该ID的MyObject?
我会使用ViewSet作为ModelViewSet的反对者.除非有充分的理由使用ModelViewSet,否则下面的代码应该可以满足您的需求.如果你转到URL,说http://yourdomain/yourmodel/10pk变量的值为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)
Run Code Online (Sandbox Code Playgroud)
谢谢 - 希望它有所帮助
| 归档时间: |
|
| 查看次数: |
3884 次 |
| 最近记录: |