【问题标题】:Django dynamic list comprehension filtering between dates日期之间的Django动态列表理解过滤
【发布时间】:2020-06-15 06:57:08
【问题描述】:

我正在使用理解在多个起始日期输入之间动态过滤。 如果两者之一没有价值,搜索应该仍然有效。

如何使用 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】:

    您可以使用 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
    

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 2016-02-27
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多