如何在Django视图集中获取API参数? [英] How can I grab the API parameter in a Django viewset?
问题描述
我正在构建一个Django应用程序,该应用程序公开了REST API,用户可以通过该API查询我的应用程序的模型。我正在 此处 p>
我的路线在mySites url.py中是这样的:
router。 register(r'myObjects',views.MyObjectsViewSet)
....
url(r'^ api /',include(router.urls)),
我的序列化器如下:
class MyObjectSerializer(serializers.HyperlinkedModelSerializer):
类元:
模型= MyObject
字段=('id','name',)
我的视图集如下:
class MyObjectsViewSet(viewsets .ModelViewSet):
queryset = MyObjects.objects.all()
serializer_class = MyObjectSerializer
当我点击API / api / myObjects /时,它为我列出了所有myObject模型。
当我点击API / api / myObjects / 60 /时,它仅给我myid == 60的对象。
到目前为止很好!
但是,我想更改MyObjectsViewSet()的逻辑,以便可以操纵/更改当我击中/ api / myObjects / 60 /时返回的内容。因此,我不想执行 MyObjects.objects.all(),而是基于myObject ID 60来做一些更复杂的事情。但是我该怎么做呢?在这种情况下,我怎样才能抓住这个数字60?它不作为参数传递。但是我真的很需要它!
在您的路由器中,再注册一个网址:
router.register(r'myObjects /(?P< id> \d +)',views.MyObjectsViewSet)
,在您的视图集中,您可以使用以下方法获取ID:
self.kwargs ['id']
Ref:http://www.django-rest-framework.org/api-guide/filtering#filtering-against-网址
I am building a Django application that exposes a REST API by which users can query my application's models. I'm following the instructions here
My Route looks like this in mySites url.py:
router.register(r'myObjects', views.MyObjectsViewSet)
....
url(r'^api/', include(router.urls)),
My Serializer looks like this:
class MyObjectSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = MyObject
fields = ('id', 'name',)
My Viewset looks like this:
class MyObjectsViewSet(viewsets.ModelViewSet):
queryset = MyObjects.objects.all()
serializer_class = MyObjectSerializer
When I hit the API /api/myObjects/ it gives me a listing of all the myObject models. When I hit the API /api/myObjects/60/ it gives me only the myObject with id == 60. Great so far!
However, I want to change the logic of MyObjectsViewSet() such that I can manipulate/change what it returns when I hit /api/myObjects/60/. So instead of doing MyObjects.objects.all() I want to do something more complex based on the myObject ID of 60. But how can I do that?? In this viewset, how can I grab that number 60? It is not passed in as an argument. But I really need it!
In your router, register one more url with:
router.register(r'myObjects/(?P<id>\d+)', views.MyObjectsViewSet)
and in your viewset you can grab the id with:
self.kwargs['id']
Ref: http://www.django-rest-framework.org/api-guide/filtering#filtering-against-the-url
这篇关于如何在Django视图集中获取API参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!