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