0

私は自分のページ区切りクラスを持っています。Django Rest Frameworkのページ分類クラスにコンテキストを渡す

class BasicPagination(PageNumberPagination): 
page_size = 3 
page_size_query_param = 'page_size' 
max_page_size = 20 

def get_paginated_response(self, data): 
    has_next, has_previous = False, False 
    if self.get_next_link(): 
     has_next = True 
    if self.get_previous_link(): 
     has_previous = True 

    meta = collections.OrderedDict([ 
     ('page', self.page.number), 
     ('has_next', has_next), 
     ('has_previous', has_previous), 
    ]) 
    ret = collections.OrderedDict(meta=meta) 
    ret["results"] = data 
    return Response(ret) 

また、私は、カスタムクエリセット方法とpagination_class = BasicPaginationを持ってgenerics.ListCreateAPIViewクラスを、持っています。私はself.kwargs.get("obj_type")をページ分類クラスに渡し、obj_typeではなくresultsを表示したいと思います。ここに私のクラスビューがあります。 self.kwargsをページ分類クラスに渡すにはどうすればよいですか?

それはOBJ_TYPEがないあなたがあなたの応答に重要ではなく、「結果」のobj_typeになりたいというあなたは意味

結果表示 -

class Translation(ListCreateAPIView): 

pagination_class = BasicPagination 
serializer_class = TranslationStepSerializer 

def get_queryset(self): 
    api_controller = ApiController.load() 
    obj_type = self.kwargs.get("obj_type") 
    pk = self.kwargs.get("pk") 

    data = api_controller.get_translation(obj_type, pk) 

    return data if not None else None 
+0

は、多分上書きしようobj_typeの余分な引数をとり、super(PageNumberPa)を呼び出して返すBasicPaginationコンストラクタです。したがって、あなたのクエリセットメソッドでは、あなたのpagination_classを再初期化し、あなたのobj_typeを渡すことができます。 – pitaside

答えて

0

私はこのことであると仮定しています。つまり、obj_typeはコード内の文字列です。

私は、特定の条件に基づいてレスポンスを変更したいと思っていたのと同様の要件がありました。この問題を回避するために、必要なすべてのパラメータをdataに追加しました。このパラメータを使用して、ページ設定されたレスポンスをカスタマイズしました。クエリセットには、これまで

ret[data['obj_type']] = data['results'] 

前:あなたのような何かを行うことができますあなたの場合は

def get_paginated_response(self, data): 

    if self.get_next_link(): 
     next_page = data["page_no"] + 1 
    else: 
     next_page = 0 

    response = { 
     "next": next_page, 
     'count': self.page.paginator.count, 
     'cards': data["cards"], 
     'companies': data["companies"], 
     'positions': data["positions"], 
     'cities':data["cities"] 
    } 

    tags = data.get('tags', None) 

    if tags is not None: 
     response['tags'] = tags 

    return Response(data=response) 

私はあなたが何を意味するのか理解していれば

data = {'results': api_controller.get_translation(obj_type, pk), 'obj_type': obj_type} 
関連する問題