过滤查询集

时间:2021-02-28 13:52:44

标签: filter view django-queryset

以下视图效果很好。我传入 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)

1 个答案:

答案 0 :(得分:0)

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