我有一个用于管理助理工作的应用程序。因此,该模型由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,此属性应该存在。
我在做什么错了?
答案 0 :(得分:0)
反向访问器course_set
在Applications
模型的实例上可用,而不在查询集(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/