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
)
Использование двойного подчеркивания __ для соединения связанных таблиц, и может использоваться для ссылки на несколько отношений в моделях.