#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)
«Чтобы ссылаться на «обратную» связь, просто используйте название модели в нижнем регистре». (документы)