Django - Как отфильтровать кверисет модели, используя поле две таблицы прочь

У меня есть три модели:

class Classroom(models.Model):
    classroom_subject = models.CharField(max_length=100)
    classroom_code = models.CharField(max_length= 5, default = '00000')
    teacher = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
 
class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    student_name = models.CharField(max_length=100)
    classes = models.ManyToManyField(Classroom, blank = True)

class WorkItem(models.Model):
    classroom = models.ForeignKey(Classroom, on_delete=models.CASCADE)
    work_description = models.CharField(max_length=500)
    date_assigned = models.DateField(auto_now_add=True, blank=True)
    time_assigned = models.TimeField(auto_now_add=True, blank=True)
    submission = models.ForeignKey(UserUpload, null = True, on_delete=models.CASCADE)

Я пытаюсь вернуть набор объектов WorkItem и отфильтровать набор через self.request.user.

Модель WorkItem связана с Classroom, а classroom связана с student.

Я пробовал:

x = WorkItem.objects.filter(
    classroom__student = self.request.user
    )

В основном проблема в том, как ссылаться на поле через две таблицы, потому что из WorkItem мне нужно ссылаться на Classroom, затем из Classroom мне нужно ссылаться на Student. Я не знаю, как это сделать. Спасибо, что прочитали мой вопрос, любая помощь будет очень признательна :).

@iri ответил на этот вопрос.

У меня было:

x = WorkItem.objects.filter(
    classroom__student = self.request.user
    )

Правильный фильтр:

x = WorkItem.objects.filter(
    classroom__student__user = self.request.user
    )

Использование двойного подчеркивания __ для соединения связанных таблиц, и может использоваться для ссылки на несколько отношений в моделях.

Вернуться на верх