文字列のリストがあります(たとえばs = ['1995','1996','1997']
)。データベース内のすべての行を検索する必要があります。ここで、一部の列の最初の4文字は、そのリスト内の任意の項目(1995-01-01
または1996-05-04
)と一致します。
見つかりまし__in
たが、完全に一致するものが見つかりました。
import operator
years = ['1995','1996','1997', ...]
query = reduce(operator.or_, [Q(year__startswith=year) for year in years])
results = queryset.filter(query)
これにより、データセットが与えられた場合にうまく機能しない可能性がWHERE year LIKE '1995%' OR year LIKE '1996%' ...;
あるのと同様のSQLが得られます。を使用してSQLを手動で作成するとパフォーマンスが向上する可能性がありますextra()
不思議なことに、私は以前、ほぼまったく同じコードで別の質問に答えました!