Django:如何从另一个模型获取与一个模型相关的所有对象?



我有3个模型:User,CourseHomework。每门课程都有一些作业和一些用户(学生)。我怎样才能得到一个用户在上的所有课程的所有作业?这些是模型:

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)

如果你有用户id你可以这样写

Homework.objects.filter(course__student_courses__id=user_id)

在上面的代码中我使用了student_courses,因为您设置了related_name

你也可以这样做,如果你有多个用户或用户id

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

因此,您可以使用任何用户字段来筛选,只需替换course__student_courses__idwithcourse__student_courses__field_name

最后一件事你也可以像course__student_courses__field_name__startswith一样使用startswith, exact, iexact, ...