フィルタのセットを使用してデータベースから一連の行を取得したいとします。djangoは条件付きでオブジェクトをフィルタリングします
条件付きフィルタがdjangoに適用できるかどうか疑問に思っていました。つまり、「変数がNoneでない場合にフィルタリングするか、そうでなければフィルタリングを適用しない」です。このような
何か:私は何をしたいのカテゴリがNoneでない場合にのみ、カテゴリフィルタを適用している
user = User.objects.get(pk=1)
category = Category.objects.get(pk=1)
todays_items = Item.objects.filter(user=user, date=now()).conditional_filter(category=category))
。
カテゴリがNone(要求オブジェクトに指定されていないことを意味します)の場合、このフィルタはまったく適用されません。これは私に「if-elif-else」状況の束を節約するでしょう。
これを行う方法はありますか?
ありがとう、私が理解できないのは 'category__isnull = True'です。私のオブジェクトのどれもカテゴリフィールドにNULLを持っていません。それはそれを常に偽にする。 – xpanta
@ xpanta、答えに説明されています。 – danihp
@danihp、申し訳ありません。私はまだ__isnull = Trueを理解していません。この状況に当てはまりますか?「カテゴリ」を含むフォーム。ユーザーがフォームを入力して送信します。ユーザーが「カテゴリ」を入力しないと、この値は「カテゴリ」になります。あなたの1番目の例に従えば、 "category"という制約なしにデータベースをフィルタリングしますか?私の理解が正しいなら、私を修正してください。前もって感謝します。 –