Django Q 对象 - Return True 和 False 匹配

Django Q Objects - Return both True and False matches

我正在构建一个具有多个 T/F 过滤器选项的搜索功能,如下所示:

Search: ________________

Filters:
___ Open to Public
___ Parking Available
_x_ Free Entrance

在这种情况下,用户专门寻找可以免费参加的活动。我希望我的 Q 对象与 return 关键字匹配的对象,其中 free_entrance 设置为 True。

我的想法是在我的搜索函数中定义变量:

search_public = None
search_parking = None
search_free_entrance = True

并像这样设置 Q 对象:

q_objects.append(
     Q(
        name__icontains=search_term, 
        public__icontains=search_public, 
        parking__icontains=search_parking,
        free_entrance=search_free_entrance
      )
)

但是,我希望对所有对象(True 或 False)进行 returned 以获取未过滤的变量(而不是仅将对象设置为 None)。是否有我可以插入的关键字,或者是否有我缺少的 Q 对象过滤器类型?

更新: 除了张贴的答案,*args 还可以用于复杂 (OR) Q 对象:

来自: http://www.nomadjourney.com/2009/04/dynamic-django-queries-with-kwargs/

args = ( Q( name__icontains = 'search_term' ) | Q( company__icontains = 'search_term' ) )

使用关键字:

search = {'name__icontains': search_term}
if search_public is not None:
    search.update({'public__icontains': search_public})
if search_parking is not None:
    search.update({'parking__icontains': search_parking})
if search_free_entrance is not None:
    search.update({'pree_entrance__icontains': search_free_entrance})
q_objects.append(Q(**search))

或更复杂的示例(您的问题来自评论):

search_kwargs = {'name__icontains': search_term}
search_args = tuple()
if search_public is not None:
    search_args += (Q(Q(company__icontains=search_public) | Q(other__icontains=search_public)),)
q_objects.append(Q(*search_args, **search_kwargs))