[英]Django: How to get all objects related to a model by another model?
I have 3 models: User
, Course
and Homework
.我有 3 个模型:
User
、 Course
和Homework
。 Each course has some homework and some users(students).每门课程都有一些作业和一些用户(学生)。 How can I have all homeworks of all courses a user is in?
我怎样才能拥有用户所参加的所有课程的所有作业? These are the models:
这些是模型:
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)
If you have user object you could do like如果你有用户对象,你可以这样做
Homework.objects.filter(course__students=user)
if you have user id you could do like如果你有用户 ID,你可以这样做
Homework.objects.filter(course__student_courses__id=user_id)
i used student_courses
in the above code because you set the related_name
我在上面的代码中使用了
student_courses
因为你设置了related_name
you could also do this if you have multiple user or user id如果您有多个用户或用户 ID,您也可以这样做
Homework.objects.filter(course__student_courses__in=user_ids) # user_ids = [1,3,4]
So you can use any of the user fields to filter to by just replacing course__student_courses__id
with course__student_courses__field_name
因此,您可以使用任何用户字段进行过滤,只需将
course__student_courses__id
替换为course__student_courses__field_name
One last thing you can also us startswith, exact, iexact, ...
like course__student_courses__field_name__startswith
最后一件事你也可以让我们
startswith, exact, iexact, ...
就像course__student_courses__field_name__startswith
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.