2011-05-20 112 views
1

訪問外鍵我有以下型號Django的模型

class SchoolClass(models.Model): 
    id = models.AutoField(primary_key = True) 
    class_name = models.TextField() 
    level = models.IntegerField() 
    taught_by = models.ManyToManyField(User,related_name="teacher_teaching",through='TeachSubject') 
    attended_by = models.ManyToManyField(User,related_name='student_attending') 

    def __unicode__(self): 
     return self.class_name 
    class Meta: 
     db_table = 'classes' 

class Relationship(models.Model): 
    rChoices = (
     (1,'Mother'), 
     (2,'Father'), 
     (3,'Guardian'), 
    ) 

    parent = models.ForeignKey(User,related_name='parent') 
    student = models.ForeignKey(User,related_name='child') 
    relationship = models.IntegerField(choices= rChoices) 
    #add in __unicode__ for admin name 

    class Meta: 
     unique_together = ('parent','student') 
     db_table = 'relationship 

我有類的PK,我想找出誰是學生在選擇類型的父母。

我愚蠢的嘗試是:

selected_class = SchoolClass.objects.get(pk=class_id) 
studs = selected_class.attended_by.all().select_related() 
r = Relationship.objects.filter(student__in=students) 

parents = [.parent for p in r] 

現在,我只是好奇,如果有這樣做(我敢肯定錯過了在文檔的東西)的一個較短的或更有效的方法是什麼?

回答

2

這應該工作

parents = Relationship.objects.filter(student__schoolclass__id=class_id).values_list('parent', flat=True) 

「來指代‘反向’的關係,只是使用模型的小寫名稱」。 (docs