2017-12-02 243 views
0

因此,我在Django中设置了一个REST API,但无法弄清楚如何使用http查询返回模型中单个字段的结果。例如,假设我们的模型用户具有'id','username'和'email'属性。如何在django rest框架查询中获得单个字段?

很容易返回该模型实例的所有相关字段,但是我怎样才能从查询中获取单个字段?

类似于myapp/api/user/1?用户名或myapp/api/user/1 /用户名是我在找的,但我找不到任何好的答案。

+0

我也会建议检查http://blog.josephmisiti.com/customzing-apis-with-django-rest-framework – Daviddd

回答

1

那么你想过滤你的模型结果吗? 如果是这样,看起来你需要创建一个APIView,获取你的模型,然后操纵你想要显示的字段。

事情是这样的:

class UserField(APIView): 


    def get(self, request): 
     path = str.split(str(request.path),'/') 
     print(path) 
     fieldname = path[4] #check your path on the print 
     if fieldname= 'username': 
      content={'username':User.objects.get(pk=path[3]).username} 
       content = { 
       'fieldname': 'something', 
      }    

      return Response(content) 
+0

所以我需要为模型的每个领域做到这一点? – Efie

+0

不,对于每个模型...只是通过您的领域循环,并与路径 – Walucas

+0

比较我仍然困惑。有什么方法可以让你展示一个如何工作的例子? – Efie

0

另一种方法,对模型中的所有领域的工作,

class UserViewSet(viewsets.ViewSet): 
    permission_classes = [IsAuthenticated] 

    def field(self, request, pk, fname): 
     user = User.objects.get(id=pk) 
     data = getattr(user, fname) 

     return Response({'result':data}) 

修改urls.py路由到视图,

url(r'^user/(?P<pk>[0-9]+)/(?P<fname>\w+)/$', UserViewSet.as_view({'get': 'field',}), name='user-field'), 

网址格式为:

/user/<user-id>/<field-name>/ 

注意:您还可以在视图中为未知字段等添加错误场景(并发送4xx错误)。

相关问题