【发布时间】:2012-11-22 15:35:48
【问题描述】:
我想为以下值和模型创建一个过滤排序混合:
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)、平均 TeacherRating(例如最小值 = 3)、CourseSignups(例如最少 5 个用户注册) (这些选项通过 GET 参数传递,例如 sort=date_ascending&f_min_date=10.10.12&...)
您将如何为此创建函数?
我尝试过使用
- 非规范化(只是在 Course 中添加了一个字段以获取所需的过滤/排序标准,并在发生更改时对其进行更新),但我对此不太满意(例如,每次 TeacherRating 后都需要大量更新)。
- ForeignKey 查询 (Course.objects.filter(session__date_from=xxx)),但我稍后可能会遇到性能问题..
感谢任何提示!
【问题讨论】:
标签: django django-models django-queryset