Python 如何使用timedelta基于DateTimeField筛选表单
我有以下会话模型: courses/models.py:Python 如何使用timedelta基于DateTimeField筛选表单,python,django,django-queryset,Python,Django,Django Queryset,我有以下会话模型: courses/models.py: class Session(models.Model): course = models.ForeignKey(Course, on_delete=models.CASCADE) course_date_start = models.DateTimeField() course_date_end = models.DateTimeField() is_in_session = True def s
class Session(models.Model):
course = models.ForeignKey(Course, on_delete=models.CASCADE)
course_date_start = models.DateTimeField()
course_date_end = models.DateTimeField()
is_in_session = True
def session_id(self):
new_session_date = self.course_date_start.strftime('%Y')
return f'{new_session_date}{self.course.number}{self.pk}'
def __str__(self):
return f'{self.course.number} - {self.course.title} - {self.session_id()}'
在my users/forms.py中:
class EnrollStudentInCourseForm(forms.Form):
global roster_limit
student = forms.ModelChoiceField(queryset=Student.objects.all())
courses=SessionRemainingSlotsForm(queryset=Session.objects.annotate(num_students=Count('student')).filter(num_students__lt=roster_limit))
我想过滤掉这些字段,这样它只显示
课程日期\u开始的课程
加上一周,以涵盖一个迟到的学生。我想我把数学搞砸了,因为我解决了它:
我所做的是在我的表单过滤器中使用timedelta
函数,仅显示仍在截止日期内的会话:
courses = SessionRemainingSlotsForm(queryset=Session.objects.annotate
(num_students=Count('student')).filter(course_date_start__gte=date.today() - timedelta(days=7),
num_students__lt=roster_limit))