問題

私は "と"フィルタリングに使用されている既存の* * filter_kwargsを持っていますが、 "または"クエリを挿入するにはどうすればよいですか?現在、想定されている "OR"クエリは "と"クエリとして扱われます。

ここに私のベースコードです:

 search_text = form_data.get("search_text", "").strip(" ")

filter_kwargs = {
    "is_active": True,
    "is_admin": False,
}


if search_text != "":
    // these are the supposed "OR" queries. how do I insert "OR" queries in kwargs?
    filter_kwargs['user__first_name__icontains'] = search_text
    filter_kwargs['user__last_name__icontains'] = search_text
    filter_kwargs['user__email__icontains'] = search_text


Profiles = Profile.object.filter(**filter_kwargs)
 

  ベストアンサー

アイテムを Q オブジェクトにラップし、論理的または:

 from django.db.models import Q

Profiles = Profile.object.filter(Q(**filter_kwargs, _connector=Q.OR)) 

しかし、最初のアイテムはANDとして扱われるべきであり、フィルタレベルでこれらを追加することでそれを行うことができます(Q -levelではありません)。

 filter_kwargs = {}
if search_text:
    filter_kwargs['user__first_name__icontains'] = search_text
    filter_kwargs['user__last_name__icontains'] = search_text
    filter_kwargs['user__email__icontains'] = search_text

Profiles = Profile.object.filter(
    Q(**filter_kwargs, _connector=Q.OR),
    is_active=True,
    is_admin=False
) 

  同じタグがついた質問を見る

djangopython-3.xdjango-models