2015-06-05 3 views
0

у меня есть следующий models.py:Джанго запросы на свойства связанного объекта устанавливает

from django.db import models 

class Teacher(models.Model): 

    name = models.CharField() 


class Student(models.Model): 

    name = models.CharField() 

    absent = models.BooleanField(default=False) 

    teacher = models.ForeignKey('Teacher',related_name='students') 

Если бы я хотел, чтобы посмотреть список преподавателей, которые имеют по крайней мере один отсутствующий студент, я могу сделать следующее:

Teacher.objects.filter(students__absent=True) 

Мой вопрос, как бы я придумал список учителей, которые, имеют все своих студентов отсутствует, за исключением учителей, которые не имеют студентов на всех? Возможно ли это с помощью ORM без отказа от SQL?

ответ

2

Вы можете сделать это:

Teacher.objects.exclude(Q(students__absent=False) | Q(students=None)) 

Это исключит все преподаватели, которые имеют по крайней мере один не отсутствующего студента, или не имеют студентов вообще.

+0

Нет, это исключает всех учителей, у которых есть хотя бы один не учащийся ** ** и ** не имеют учеников вообще. – Leistungsabfall

+0

А, я не думал приближаться к нему с обратной стороны. Благодарю. И, увидев комментарий выше, я думаю, что вы ищете Teacher.objects.exclude (Q (students__absent = False) | Q (students = None)) Но я ценю, что вы показываете мне правильный подход. –

+0

@Leistungsabfall Ты прав, мой плохой. – knbk

Смежные вопросы