Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用timedelta基于DateTimeField筛选表单_Python_Django_Django Queryset - Fatal编程技术网

Python 如何使用timedelta基于DateTimeField筛选表单

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

我有以下会话模型:

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 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))