ここから、Django でクエリセットに対して OR 操作を実行するには、次のようなことができることがわかります。
from django.db.models import Q
User.objects.filter(Q(income__gte=5000) | Q(income=0))
ここで、フィルター呼び出し内で Q 条件をハードコーディングする代わりに、動的に設定したいとします。つまり、次のようなことをしたいとします。
User.objects.filter(Q(income__gte=5000) [ONLY IF CONDITION A...] | Q(income=0) [ONLY IF CONDITION B...) | Q(name__contains="blah") [ONLY IF CONDITION C...])
別の言い方をすれば、Q オブジェクトが文字列の場合、特定の条件下で特定の Q オブジェクトを追加したいと思います。これは次のように表されます。
q_string = ""
if conditionA:
q_string += Q(income__gte=5000)
if conditionB:
q_string = Q(income=0)
User.objects.filter(q_string)
しかし、フィルターに入れるものは実際には文字列ではないため、これは機能しません。代わりに何をすべきですか?