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))
我正在构建一个具有多个 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))