日期之间的Django动态列表理解过滤

问题描述 投票:0回答:1

我正在使用理解力在多个最新输入之间进行动态过滤。如果两者之一没有价值,则搜索仍然可以进行。

我如何使用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)
python django list-comprehension
1个回答
0
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.