2016-08-08 4 views
1

私は3モデル:PupilsInstructorGroupがあります。私は現在のグループから生徒を持つすべてのInstructor秒を返しGroupモデルのプロパティを書くにはどうすればよいDjango先進クエリ

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. :彼らはとても似Pupilsモデルを介して接続されていますか?

    @property 
    def instructors(self): 
        from pupils.models import Instructor 
        return list(Instructor.objects.filter(pupils__isnull=False).values()) 
    
  2. がどのように私は、各Instructorの現在のGroupからPupilsの数をカウントします:私は今のためにできる最善のは、任意の生徒を持つすべてのインストラクターを見つけるのですか?

答えて

2

私は3つのモデルがあります:生徒、インストラクター、グループ。あなたは、

今、このM2Mの関係を使用して
class Instructor: 
    #... 
    groups = models.ManyToManyField(Group, through='Pupils') 

:これは、あなたがこのように定義することができますInstructorGroup間M2Mの関係を有することを意味する

:彼らは を通じてそのような生徒のモデルが接続されていますこのようなinstructorグループとることができます。

instructor.groups.all() 

をあなたはまた、M2M関係私のreverse relationを使用することができますグループのためのすべてのインストラクターを取得する。

group.instructor_set.all() 

私はそれを正しく理解すれば、あなたがこのような何か必要なあなたもインストラクターが問題の第二の部分については今.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() 

を使用してカウントを取得することができます

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