我正在使用理解力在多个最新输入之间进行动态过滤。如果两者之一没有价值,则搜索仍然可以进行。
我如何使用Django range operator应用以下逻辑?
我真正想要的是能够通过过滤qs = qs.filter(**filters)
并将其转换为qs = qs.filter(date_from1__lt=whatever)
def mail_search(request):
today_date = datetime.now()
qs = MailAllocation.objects.filter(cmp_id=cmp_id)
"""comprehension: build a dictionary and use it for filtering queryset dynamically"""
filters = {
key: value
for key, value in request.POST.items()
if key in ['date_from1','date_to1','date_from2','date_to2','date_from3','date_to3']
}
qs = qs.filter(**filters).order_by('-creation_date')
context={
'dfs_search_results':qs,
}
return render(request,'mail_search_results.html',context)
您可以使用Q对象链接您的查询,因此您的每个键都将简化为以下内容:-
from django.db.models import Q
q1 = Q(creation_date__range=(date_from1, date_from2))
// Build other queries similarly
qs = qs.filter(q1 | q2 | q3) // The | is the OR operator