Django: Как получить все объекты, связанные с моделью по другой модели?

У меня есть 3 модели: User, Course и Homework. Каждый курс имеет некоторые домашние задания и некоторых пользователей (студентов). Как я могу получить все домашние задания всех курсов, в которых участвует пользователь? Вот модели:

class User(AbstractUser):
    # ...

class Course(models.Model):
    students = models.ManyToManyField(User, blank=True, related_name='student_courses')
    # ...

class Homework(models.Model):
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='course_homeworks')
    # ...

Попытка:

Homework.objects.filter(course__students=user)

Если у вас есть объект пользователя, вы можете сделать так

Homework.objects.filter(course__students=user)

если у вас есть идентификатор пользователя, вы можете сделать так

Homework.objects.filter(course__student_courses__id=user_id)

я использовал student_courses в приведенном выше коде, потому что вы установили related_name

Вы также можете сделать это, если у вас несколько пользователей или идентификаторов пользователей

Homework.objects.filter(course__student_courses__in=user_ids) # user_ids = [1,3,4]

Таким образом, вы можете использовать любое из полей пользователя для фильтрации, просто заменив course__student_courses__id на course__student_courses__field_name

И последнее, вы также можете использовать startswith, exact, iexact, ... как course__student_courses__field_name__startswith

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