我想对某些模板操作动态地过滤查询集。例如一个学年的下拉列表,因此我只显示所选年份的结果。我需要在哪里直接在视图中定义此行为或在模板中对其进行过滤?
我已经尝试在视图中进行过滤,但是我一直在努力从“课程模式”中获取正确的条目。我不知道如何从已经过滤的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年开始的成绩,则可以选择该成绩,点击“提交”,然后将获得过滤后的数据。
感谢您的帮助。