django, получающий доступ к внешнему ключу в модели

#django #django-models

#django #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]
  

Теперь мне просто интересно, есть ли более короткий или эффективный способ сделать это (я уверен, что что-то пропустил в документах)?

Ответ №1:

Это должно сработать

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

«Чтобы ссылаться на «обратную» связь, просто используйте название модели в нижнем регистре». (документы)