ゴンサロDambra:
私は結果をフィルタリングし、それのためのビューを、やってDjangoのモデルを持っています。
models.py:
Ingredient(models.Model):
account = models.ForeignKey(Account, on_delete=models.CASCADE, null=False)
brand = models.ForeignKey(Brand, on_delete=models.CASCADE, null=False)
name = models.CharField(max_length=100, null=False, blank=False)
cost = models.DecimalField(max_digits=14, decimal_places=2, null=False)
今、ポイントは(除くすべてのフィールドを持つ検索フォームということでaccount
、もちろん)は、そのフィールドのいずれも必要ありません、あなただけの単一のフィールドまたは2種3のいずれかによってフィルタリングすることができます。
問題は私が行うことができないということです。
Ingredient.objects.filter(account=account, brand=brand, name=name, cost=cost)
...ブランド名、およびコストが空/ヌルを送ることができるので、
どのように私は、各フィルタリング可能性のためのフィルタラインコードをせずにこの問題を解決することができますか?
ウィレム・ヴァン・当社:
私たちは、ユーティリティ関数を作ることができることをフィルタNone
の。例えば:
from django.db.models import Q
def filter_without_none(**kwargs):
return Q(**{k: v for k, v in kwargs.items() if v is not None and v != ''})
今、私たちはしてフィルタリングすることができます:
Ingredient.objects.filter(
filter_without_none(account=account, brand=brand, name=name, cost=cost)
)
値の1つ(または複数)のような場合account
、brand
及び/又はname
ありNone
、これらは、あろうないフィルタリングのために考慮されます。