Django:根据模板操作动态筛选查询集

2024-05-29 04:59:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我想对某个模板操作动态过滤查询集。e、 g.学年的下拉列表,因此我只显示所选学年的结果。我需要在何处直接在视图中定义此行为,或在模板中对其进行过滤

我已经尝试过在视图中过滤,但是我很难从我的课程模式中获得正确的条目。我不知道如何从我已经过滤过的CourseGrade查询集中获取课程的年度信息。一个简单的course_info = Course.objects.filter(id=student_grades.course.pk)是不可能的,因为我会在模板中这样做

class Course(models.Model):
    import datetime
    YEAR_CHOICES = []
    for r in range(2000, (datetime.datetime.now().year+2)):
        YEAR_CHOICES.append((r,r))

    name = models.CharField(choices=course_names, max_length=32)
    teacher = models.ForeignKey(Teacher, on_delete=models.SET_NULL, null=True, blank=True)
    school_year = models.IntegerField(choices=YEAR_CHOICES, default=datetime.datetime.now().year)
    half_year = models.IntegerField(choices=course_halfyear, default=1)
g
    def __str__(self):
        return self.name


class CourseGrade(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    grade = models.DecimalField(validators=[MinValueValidator(1),
                                  MaxValueValidator(6)], null=True, blank=True, decimal_places=1, max_digits=2)
    course_type = models.CharField(choices=course_types, max_length=1, null=True, blank=True)

    class Meta:
        unique_together = ["student", "course"]

    def __str__(self):
        return '{0}: {1}'.format(self.student, self.course.name)
def student_grade(request):
    current_student = get_object_or_404(Student, user=request.user)
    student_class = School_Class.objects.filter(student=current_student)
    student_grades = CourseGrade.objects.filter(student=current_student).order_by('course')
    context={'current_student': current_student, 'student_grades': student_grades, 'student_class': student_class}

    return render(
        request,
        'bgrade/student/student_grade.html',
        context)

预期结果将是从模板的某种输入中筛选出的查询集(所以如果一个学生想看到他2019年的成绩,他可以选择它,点击提交,然后得到过滤后的数据

谢谢你的帮助


Tags: self模板truedatetimeobjectsmodelscurrentyear

热门问题