两种型号:
class University(models.Model):
name = models.CharField("name", max_length = 48)
city = models.ForeignKey(City, on_delete = models.CASCADE)
class Course(models.Model):
name = models.CharField("course name", max_length = 48)
university = models.ForeignKey(University, on_delete = models.CASCADE)
students = models.ManyToManyField(Student, related_name = "%(class)s_name", related_query_name = "student_course_qs", blank = True)
online = models.BooleanField("online course", default = False)
semester = models.PositiveIntegerField("choose 1-6", default = 1, choices = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)])
time_update = models.DateTimeField("last info update", auto_now = True)
限制:如果Course
有students
,则不能是online
,反之亦然.
如何获得给定city
的所有Universities
上的所有Courses
的列表,其中Course
上的latest个条目有students
个,而Course
个条目保存在第三个semester
中?
我试着对University
个不同的组进行循环,但这导致了大量的查询:
universities = University.objects.filter(city = City.objects.first())
wanted = []
for univ in universities:
c = Course.objects.filter(university = univ).order_by("time_update").last()
if c.semester == 3 and not c.online:
wanted.append(c.id)
selected_courses = Courses.objects.filter(id__in = wanted)
我在这里看到的问题是,我创建了太多的查询,在筛选universities
个查询之后,它们就已经分组了--我可以一个接一个地处理这些组,而不重新执行查询吗?