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