Django
のオブジェクトをフィルタリングする最適な方法は何ですか?Djangoでオブジェクトをフィルタリングする最も実用的で効率的な方法は?
私の場合、GET request
によって送信された異なるパラメータでオブジェクトをフィルタリングする必要があります。だから、CBV
の私のget_queryset
に私は私のカスタムmodels.QuerySet
のカスタム関数に値を送信し、その結果取得:
return MyModel.objects.all().custom_filter(param1, param2, param3)
しかし、私のカスタム関数では、最も疑わしいものが起こっています。
- まず、渡された値をチェックし、それらをクリーニングします。
次に、すべてのparam Iフィルタクエリセットに対して、
Q Objects
を使用して個別にフィルタを設定します。これは、その時のために正常に動作def custom_filter(self, param1, param2, param3): # cleaning and checking staff # ... then result = self.filter(Q() | Q()) # related to param1 if (param2 != None): result = result.filter(Q()) # related to param2 if (param3 != None): result = result.filter(Q() & Q()) # related to param3 # and etc. return result.distinct()
:のようにカスタムmodels.QuerySet
ではそれが見えます。しかし、私はそれが確かに非効率だと思う。誰かがより良い解決策を持っているなら、それを提供してください。
私はDjangoでかなり新しいです。私は本当に 'QuerySet'が怠惰だとは知らなかった。 – catscoolzhyk
それは大きな違いになります:) – Shadow