【问题标题】:Filter a Query Set过滤查询集
【发布时间】:2021-05-30 05:59:48
【问题描述】:

以下视图效果很好。我传入 student_id,我得到一个与该 student_id 相关的标题和出勤天数的查询集。我的挑战是我无法弄清楚如何按特定日期或日期范围过滤我的出席天数查询集。

我尝试过以下几种变化:

attendance_days = student.zzabsentdetail_set.order_by('-absent_date').filter('absent_date' is between '2021-02-01' and '2021-02-26')

attendance_days = student.zzabsentdetail_set.order_by('-absent_date').filter('absent_date' > '2021-02-01')

如果可能,我想按该行上的缺席日期过滤我的 zzabsent_detail 查询集。

这是我的看法:

def absent_detail(request, student_id):
    """Show student & attendance info"""
    student = Student.objects.get(id=student_id)
    header = student.zzheader_set.order_by('id')
    attendance_days = student.zzabsentdetail_set.order_by('-absent_date')
    context = {'student': student, 'header': header, 'attendance_days': 
attendance_days}
    return render(request, 'learning_logs/absent_detail_99.html', context)

【问题讨论】:

    标签: filter view django-queryset


    【解决方案1】:

    您可以使用__range lookup [Django-doc]

    attendance_days = student.zzabsentdetail_set.filter(
        absent_date__range=('2021-02-01', '2021-02-26')
    ).order_by('-absent_date')

    这里的两个边界包含,因此 2 月 1 日或 2 月 26 日的项目也将包含在内。

    或者您可以使用__gt lookup [Django-doc] 来表示该值应大于给定值:

    attendance_days = student.zzabsentdetail_set.filter(
        absent_date__gt='2021-02-01'
    ).order_by('-absent_date')

    在过去的 10 天里,您可以使用 date 对象而不是字符串,因此:

    from datetime import timedelta
    from django.utils.timezone import now
    
    from_dt = now().date()-timedelta(days=10)
    
    attendance_days = student.zzabsentdetail_set.filter(
        absent_date__gt=from_dt
    ).order_by('-absent_date')

    【讨论】:

    • 像魅力一样工作!非常感谢!请问,我如何将相同的概念应用于过滤当前日期最后 10 天内的缺勤情况?
    • @ScottNorman:见编辑。您可能希望将__gt 替换为__gte,具体取决于它应该大于还是大于或等于
    • 再次感谢您!你拯救了我的早晨!
    猜你喜欢
    • 2020-08-22
    • 2019-04-15
    • 2011-09-29
    • 2022-12-05
    • 2019-03-16
    • 2018-10-02
    相关资源
    最近更新 更多