我想为以下值和模型创建一个过滤排序混合:
class Course(models.Model):
title = models.CharField(max_length=70)
description = models.TextField()
max_students = models.IntegerField()
min_students = models.IntegerField()
is_live = models.BooleanField(default=False)
is_deleted = models.BooleanField(default=False)
teacher = models.ForeignKey(User)
class Session(models.Model):
course = models.ForeignKey(Course)
title = models.CharField(max_length=50)
description = models.TextField(max_length=1000, default='')
date_from = models.DateField()
date_to = models.DateField()
time_from = models.TimeField()
time_to = models.TimeField()
class CourseSignup(models.Model):
course = models.ForeignKey(Course)
student = models.ForeignKey(User)
enrollment_date = models.DateTimeField(auto_now=True)
class TeacherRating(models.Model):
course = models.ForeignKey(Course)
teacher = models.ForeignKey(User)
rated_by = models.ForeignKey(User)
rating = models.IntegerField(default=0)
comment = models.CharField(max_length=300, default='')
- 课程可以是“离散数学 1”
- 课程是与课程相关的个别课程(例如 1. 简介、2. 第 I 章、3 期末考试等)以及日期/时间
- CourseSignup 是学生的“注册”
- TeacherRating 跟踪学生对老师的评分(课程完成后)
我想实现以下功能
- 按日期(最早的 Session.date_from)、Course.Name 排序(asc、desc)
- 筛选依据:日期(最早的 Session.date_from 和最后的 Session.date_to)、Average TeacherRating(例如最小值 = 3)、CourseSignups(例如最少 5 个用户注册)(这些选项通过 GET 参数传递,例如 sort=date_ascending&f_min_date= 10.10.12&...)
你将如何为此创建一个函数?
我试过使用
- 非规范化(只是在 Course 中添加了一个字段以获取所需的过滤/排序标准,并在发生更改时对其进行更新),但我对它不太满意(例如,在每次 TeacherRating 之后需要大量更新)。
- ForeignKey 查询(Course.objects.filter(session__date_from=xxx)),但我稍后可能会遇到性能问题..
感谢您的任何提示!