2016-11-17 20 views
1

私はDjangoRestApiを使用していますが、queryset(ormベース)ビューの魅力のように働いていますが、私は同じバックグラウンドで同じ方法で動作するビューを作成するのに苦労しています。ベースのビューがあります。特にフィルタを追加して、自動的にキャストして検証するようにしたいと思います。django-rest-framework非ormベースのフィルタリング

以下の疑似コード:

class NewsFilter(django_filters.FilterSet): 
    category = django_filters.NumberFilter(name='category') 
    limit = django_filters.NumberFilter(name='limit') 
    page = django_filters.NumberFilter(name='page') 


class NewsView(generics.APIView): 
    filter_class = NewsFilter 

    def get(self, request): 
     filters = self.filter_class(??) # not sure, what to put here 

     payload = logic.get_business_news(**filters.data) # same 

     return Response(payload, status=status.HTTP_200_OK) 

問題に取り組むためにどのように任意のヒントが理解されるであろう。されているURLに何か

  • ユーザーの種類や、POST、ジャンゴ・休息を傍受関連する値を経由して送信し、それらを抽出し、正しい型にそれらをキャストし、辞書として
  • フィルタを返す:

    究極の目標は、にありますそれらはシリアライザをORM基づいていたかのように表示

答えて

1

任意の単一のフィルタへの関数シグネチャは

class MyFilter(django_filters.Filter): 
    def filter(self,queryset,value): 
     [...] 

The function signature to a FilterSet is:

def __init__(self, data=None, queryset=None, prefix=None, strict=None): 

あなたはdataのparamとしてrequest.GETに渡し、その後、あなたのクエリセットに渡すようなので、それが見えます。

+0

私はこの答えがa)非常に不完全であり、b)私の質問に答えることができないこの感覚を持っているので、私が探しているものを明確にするためにオリジナルの質問をわずかに編集しました – Drachenfels

+0

基本的に 'FilterSet'はクエリーセットで動作します。フィルタリングしているクエリセットがありますか?そうでなければ、 'FilterSet'を使うことはできません。 –

+0

私はORMを使用しないのでクエリーセットで作業したくありません。開発者や他の非専門家が手動でAPIを使ってテスト/作業できるように、/ api/endpointにフォームをレンダリングしますjsonのペイロードなどを入力します。私はdjango-rest-frameworkが実際には非常に限られたフレームワークであり、ワークフローは1つしか考えていないことを理解し始めました。 :/ – Drachenfels

関連する問題