このブログエントリに出くわしたのは、ChoiceFieldからビューに返された結果をリスト内包法(すべての中間データ構造なしで空のキー/値を削除する手法)を使用して処理するエレガントな方法について説明したものです。ただし、この特定のアプローチはMultipeChoiceFieldsでは機能しないようです。それらにアプローチする同様の方法はありますか?(たとえば、次の例の寝室とバスルームのフィールドが複数の値を返した場合)。
コードは次のとおりです。
if search_form.is_valid():
searchdict = search_form.cleaned_data
# It's easier to store a dict of the possible lookups we want, where
# the values are the keyword arguments for the actual query.
qdict = { 'city': 'city__icontains',
'zip_code': 'zip_code',
'property_type': 'property_type_code',
'county': 'county__icontains',
'minimum_price': 'sale_price__gte',
'maximum_price': 'sale_price__lte',
'bedrooms': 'bedrooms__gte',
'bathrooms': 'baths_total__gte'}
# Then we can do this all in one step instead of needing to call
# 'filter' and deal with intermediate data structures.
q_objs = [Q(**{qdict[k]: searchdict[k]}) for k in qdict.keys() if searchdict.get(k, None)]
どうもありがとうございました...これは素晴らしいコミュニティです。