主題の件、下記の対応が可能か、ご教示をお願いしたく、よろしくお願いします。
【イメージ】
[Q1,Q2,Q3....]を
Q1 and Q2 and Q3 and.... のようにしたいです。
実際の構想ソースは下記です。
from django.db.models import Q def and_search(model, fields_list, search_conditions_list, search_values_list): filter_factor = [] i = 0 for field in fields_list: if len(search_values_list[i]) != 0: search_value = search_values_list[i] search_condition = search_conditions_list[i] filter_factor.append(Q(exec("{} = '{}'".format(field + '__' + search_condition, search_value)))) i += 1 return model.objects.select_related().filter(☆ここでfilter_factorリストにあるQオブジェクトをあるだけANDしたい)
and_search関数の実行イメージは以下です。
and_search(Model, ['name','name_kana'], ['icontains', 'icontains'], ['あいうえお','アイウエオ'])
<追伸> 上記関数は機能に問題ありです。
Djangoのfilterは変数名(name_icontainsのように)で検索条件を操作していますが、関数化するためには、変数名を動的に生成する必要があります。
exec関数で、動的な変数実装を行おうとすると、うまく機能してくれません。(上のコードではQオブジェクトの内容がNoneになります。)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/20 10:01