我试图通过以下操作来降低我的复杂性。我正在努力把所有的老师都安排在活跃的教室里。
teacher/models.py:
Teacher(models.Model):
name = models.CharField(max_length=300)
classroom/models.py:
Classroom(models.Model):
name = models.CharField(max_length=300)
teacher = models.ForeignKey(Teacher)
students = models.ManyToManyField(Student)
status = models.CharField(max_length=50)
admin/views.py
teachers = Teacher.objects.prefetch_related(Prefetch('classroom_set',queryset=Classroom.objects.filter(status='Active'))
for teacher in teachers:
classrooms = teacher.all()
# run functions通过这样做,我得到了有教室的老师。但是它也返回了我不想要的没有活动教室的教师(空名单)。正因为如此,我不得不用空的classroom_set在数千名教师周围转圈。有什么办法可以把那些classroom_set是谁的老师赶走吗?
这是我最初的问题- Django multiple queries with foreign keys
谢谢
发布于 2018-10-11 09:52:33
如果希望所有教师至少有一个相关的活动类,则不需要预取这些类,可以对相关对象进行筛选,例如:
Teacher.objects.filter(class__status='Active').distinct()如果您也想过滤classroom_set,则需要将筛选与.prefetch_related结合起来。
from django.db.models import Prefetch
Teacher.objects.filter(
class__status='Active'
).prefetch_related(
Prefetch('class_set', queryset=Class.objects.filter(status='Active'))
).distinct()在这里,我们将过滤如下:
SELECT DISTINCT teacher.*
FROM teacher
JOIN class on class.teacher_id = teacher.id
WHERE class.status = 'Active'https://stackoverflow.com/questions/52757040
复制相似问题