Django-filter: DRF統合は、追加のビューセットアクションでは機能しません

作成日 2018年08月16日  ·  9コメント  ·  ソース: carltongibson/django-filter

ここで説明するように@actionデコレータを使用して単一のビューセットに複数のリストアクションがあり、ここのドキュメントで指定されているようにfilter_classを介してFilterSetを含めました。 フィルタは、デフォルトのViewSetリストおよび取得アクションにのみ適用され、実際にフィルタが必要なカスタムのリストまたは取得アクションには適用されません。

最も参考になるコメント

次のように通話を移動するだけで機能しました

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    qs = self.filter_queryset(self.get_queryset())
    serializer = SpecializedModelListSerializer(qs, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)

助けてくれてありがとう!!!

全てのコメント9件

こんにちは@estianross。 コメントできるようになる場合は、詳細を提供する必要があります。

追加のアクションがfilter_queryset()を呼び出していることを確認しますか?

彼らはそうしますが、それが問題である場合、私はそれを使用されるべき方法で使用していないとかなり確信しています、私はこれらのアクションで私がしていることの基本を示すために以下の簡単なサンプルアクションを含めました

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    serializer = SpecializedModelListSerializer(self.filter_queryset(self.get_queryset()), many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

APITestCaseを作成し、期待するurl +クエリパラメーターをプラグインすることをお勧めします。 その後、必要に応じてアサーションを作成し、ブレークポイントを挿入して、問題が発生している場所を確認できます。

(これ以上の詳細がなければ、アドバイスすることは不可能です。)

次のように通話を移動するだけで機能しました

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    qs = self.filter_queryset(self.get_queryset())
    serializer = SpecializedModelListSerializer(qs, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)

助けてくれてありがとう!!!

私の場合、これはほとんどの場合うまくいかないようです。

この問題は再開されるべきだと思います。 私は同じ問題を抱えており、提案された解決策は私のために働いた。

@action(methods = ['get']、detail = True、url_path = 'retrieve_by_card_no /(<int:CardNo>)')
def getByCarNo(self、request、CardNo):
user = get_object_or_404(employe_model、EmpCardNo = CardNo)
Response(serializers.EmployeeInfoSerializer(user).data、status = status.HTTP_200_OK)を返します

従業員IDの代わりに彼のカード番号で従業員を検索したい

誰かが私を助けることができますか?

URLでアクションと一緒にクエリパラメータを渡すと、フィルタの統合が正しく機能すると思います。 以下は私がした行動でした

@action(methods=['GET'], detail=False)
def export(self, request): 
    queryset = self.get_queryset()
    filtered_queryset = self.filter_queryset(queryset)

DRFブラウズ可能APIからエクスポートアクションを呼び出そうとすると、送信されたリクエストは次のようになりました。
/ api / viewname / export /代わりに、次のように呼び出す必要があります
/ api / viewname / export /?query_param_1 = value1&?query_param_2 = value2

アクションと一緒にクエリパラメータを渡すと、filtersetクラスが呼び出されるため、filtered_queryset変数にフィルターされたクエリセットが取得されます。

どうもありがとうございました

2021年4月28日水曜日午前0時32分MohammedSunasra @* >
書きました:

クエリを渡せば、フィルター統合は正しく機能すると思います
URL内のアクションと一緒にparams。 以下は私がした行動でした

@action(methods = ['GET']、detail = False)
def export(self、request):
queryset = self.get_queryset()
filtered_queryset = self.filter_queryset(queryset)

DRFブラウズ可能APIからエクスポートアクションを呼び出そうとすると、リクエスト
送られてきたのは
/ api / viewname / export /代わりに、次のように呼び出す必要があります
/ api / viewname / export /?query_param_1 = value1&?query_param_2 = value2

アクションと一緒にクエリパラメータを渡すと、フィルタセットが呼び出されます
クラス、したがって、filtered_querysetでフィルタリングされたクエリセットを取得します
変数


コメントしたのでこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/carltongibson/django-filter/issues/967#issuecomment-828220562
または購読を解除する
https://github.com/notifications/unsubscribe-auth/AMD2QQXC6FGISRWTHRAGUSTTK62Y7ANCNFSM4FP6FMMQ

このページは役に立ちましたか?
0 / 5 - 0 評価