我有一个多过滤器函数,它返回基于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)