我有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)
如果你有用户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__id
withcourse__student_courses__field_name
最后一件事你也可以像course__student_courses__field_name__startswith
一样使用startswith, exact, iexact, ...