2016-08-08 14 views
1

Ich habe 3 Modelle: Pupils, Instructor, Group. Sie sind wie so durch das Pupils Modell verbunden:Django erweiterte Abfragen

class Pupils(models.Model): 
    instructor = models.ForeignKey(Instructor, blank=True, default=None, null=True) 
    group = models.ForeignKey(Group, default=None, null=True, blank=True) 
  1. Wie schreibe ich eine Immobilie für Group Modell, das alle Instructor s zurückgibt, die Schüler aus der aktuellen Gruppe haben? Das Beste, was ich kann jetzt tun ist, alle Lehrer finden, die alle Schüler haben:

    @property 
    def instructors(self): 
        from pupils.models import Instructor 
        return list(Instructor.objects.filter(pupils__isnull=False).values()) 
    
  2. Wie zähle ich die Anzahl der Pupils aus dem aktuellen Group für jeden Instructor?

Antwort

2

Ich habe 3 Modelle: Schüler, Ausbilder, Gruppe. Sie sind verbunden durch die Schüler-Modell wie folgt:

Das bedeutet, dass Sie eine M2M-Beziehung zwischen Instructor und Group, die Sie wie folgt definieren:

class Instructor: 
    #... 
    groups = models.ManyToManyField(Group, through='Pupils') 

nun diese M2M Beziehung verwenden, können Sie eine instructor Gruppen wie diese können nehmen:

instructor.groups.all() 

Sie auch die reverse relation der M2M-Beziehung verwenden i Um alle Instruktoren für eine Gruppe zu bekommen.

group.instructor_set.all() 

Sie können auch die Lehrer unter Verwendung .count()

#group instructors count 
group.instructor_set.count() 
#or if you want to count pupils, 
#use the reverse relation of the ForeignKey 
#group.pupils_set.count() 

Jetzt über den zweiten Teil der Frage zählen, wenn ich es richtig verstehe, müssen Sie etwas wie folgt aus:

#this will give you instructors of a group with their pupils count. 
group.instructor_set.annotate(pupils_count=Count('pupils'))