如何从多对多关系中检索条目

时间:2020-01-08 13:40:24

标签: python django django-orm

我有一个用于管理助理工作的应用程序。因此,该模型由3个模型组成:人员,课程,应用程序(典型的多对多关系)。 我的models.py如下所示:

class Person(AbstractUser):
  ...

class Course(models.Model):
  year = models.charField(max_length=9)
  term = ...

class Applications(models.Model):
    applicant = models.ForeignKey(Person, on_delete=models.CASCADE, related_name="applicant")
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    status = models.CharField(max_length=255, default='Pending')

在表单的上下文中,我需要检索一个人雇用的所有课程,以便填充下拉列表。

很容易获得状态为“已雇用”的当前登录用户的所有应用程序:

Applications.objects.filter(applicant=user, status="Hired")

但是我无法获得所有相关课程的查询集:

Applications.objects.filter(applicant=user, status="Hired").course_set

给我回信:

AttributeError:“ QuerySet”对象没有属性“ course_set”

根据Django documentation,此属性应该存在。

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

反向访问器course_setApplications模型的实例上可用,而不在查询集(Applications.objects.filter返回的查询集)上可用。

例如,如果您有一个名为Applications的{​​{1}}实例,则可以执行以下操作:

application

获取与application.course_set.all() 相关的Course的所有实例。


如果要从过滤的application中获取相关的Course实例:

Applicaitons

这将返回相关Applications.objects.filter( applicant=user, status="Hired" ).values_list( 'course', flat=True ).distinct() 实例的主键。

答案 1 :(得分:0)

只需使用_set即可访问它。

首先尝试使用文档,以获取想法。 https://docs.djangoproject.com/en/3.0/ref/models/relations/