Django:通过另一个模型访问模型

时间:2009-12-05 20:24:22

标签: django model

class Project(models.Model):
    title = models.CharField()  

class Job(models.Model):
    name = models.CharField()
    user = models.ForeignKey(User)
    project = models.ForeignKey(Project)  

每个项目都有很多工作。如何获得项目所有工作的所有用户列表? 我想出了这个:

users = set()
for job in project.job_set.all():
    users.add(job.user)

如果没有明确地循环遍历每项工作,是否有更简单的方法?

2 个答案:

答案 0 :(得分:4)

使用Django's join syntax并从User模型开始:

users = User.objects.filter(job_set__project=project).distinct()

答案 1 :(得分:2)

或者,您可以通过Job模型使用Project到User之间的ManyToMany关系,该模型实际上是一个连接模型:

class Project(models.Model):
   users = models.ManyToManyField(User, through='Job')
   ...

然后简单地做:

project.users.all()