我有一个多过滤器函数,它返回基于4个参数的诊所结果。我想添加第5个参数,即BooleanField
(在模型和表单中)。
如果True
,我希望该字段返回相应的元素,但如果False
,则根据独立于此BooleanField
的其他搜索参数返回所有元素。
if request.htmx:
name = request.GET.get('name')
city = request.GET.get('city')
ward = request.GET.get('ward')
speciality = request.GET.get('speciality')
english = request.GET.get('english')
print(f'english: {english}')
if all([len(name) == 0, len(city) == 0, len(ward) == 0, len(speciality) == 0]):
qs = None
else:
qs = Clinic.objects.filter(Q(name__icontains=name) &
Q(city__icontains=city) &
Q(ward__icontains=ward) &
Q(speciality__icontains=speciality))
我尝试将英语变量作为
Q(english_support=english)
但是没有成功。如果我打印出结果,如果没有检查,它返回None
,如果检查,返回on
。我如何添加条件,如果None
,根据其他Q
参数返回所有结果,如果True
,只需将其添加到其他条件?
1条答案
按热度按时间gab6jxml1#
您可以链接多个
.filter()
方法,因此仅当相应的表单字段为True
(=其值为on
,这是复选框的默认值)时才应用新的布尔过滤器。