2017-12-02 16 views
0

私はDjangoでREST APIを設定していますが、httpクエリを使用してモデル内の単一フィールドの結果を返す方法を理解できません。たとえば、モデルのUserに属性 'id'、 'username'、および 'email'があるとします。django restフレームワーククエリの結果として単一フィールドを取得するには?

モデルインスタンスの関連フィールドをすべて返すのは簡単ですが、クエリから単一のフィールドを取得するにはどうすればよいですか?

myapp/api/user/1のようなものがありますか?usernameまたはmyapp/api/user/1/usernameは私が探しているものですが、良い回答は見つかりません。

+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}) 

は、ビューへのルーティングに

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

URLフォーマットは、

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

注:エラーシナリオを未知のフィールドなどのビューに追加することもできます(また、4xxエラーを送信することもできます)。

関連する問題