为搜索函数添加布尔值



我有一个多过滤器函数,它返回基于4个参数的Clinic结果。我想添加第五个参数,它是一个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只是将其添加到其他条件?

您可以链接多个.filter()方法,因此仅当相应的表单字段为True(=其值为on,这是复选框的默认值)时应用新的布尔过滤器。

if request.htmx:
name = request.GET.get('name')
city = request.GET.get('city')
ward = request.GET.get('ward')
speciality = request.GET.get('speciality')
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))
if request.GET.get('english') == 'on':
qs = qs.filter(english_support=True)

相关内容

  • 没有找到相关文章

最新更新