0

3 つの BooleanFields を持つモデルがあり、チェックボックス フォームを使用してデータベースにクエリを実行したいと考えています。出力は、チェックされたフィールドの少なくとも 1 つを持つテーブルのすべてのエントリである必要があります。今、私はこのようなものを持っています:

f=mform.cleaned_data['F']
h=mform.cleaned_data['H']
s=mform.cleaned_data['S']
course_list=[]
course_list=Course.objects.filter(Q(F=f)|Q(H=h)|Q(S=s))

しかし、これは常にすべてのテーブルを返すため、明らかに機能しません。基本的に、これらのフィールドのいずれかが True であるすべての Course レコードを取得したいと考えています。何か案は?

4

1 に答える 1

1

クエリ: 「(F が True OR H が True OR S が True) であるすべてのコース レコードを選択する」

q_filter = Q()

if mform.cleaned_data['F']:
    q_filter |= Q(F=True)
if mform.cleaned_data['H']:
    q_filter |= Q(H=True)
if mform.cleaned_data['S']:
    q_filter |= Q(S=True)

if q_filter:
    course_list = Course.objects.filter(q_filter)
else:
    course_list = Course.objects.none()

これはかなり基本的なアプローチです。より洗練された 1 行のループで実行することもできますが、ここではわかりやすくしたいと思います。時間をかけて Q オブジェクトを構築します。あなたの例では、True または False の可能性のある値をフィルタリングしていますが、必要なのは、True 値を持つ特定のフィールドを持つレコードのみをフィルタリングすることだと言いました。

于 2012-06-10T23:14:33.137 に答える