4


1

Django:別のモデルからモデルにアクセスする
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 Answer


4


Djangoの結合構文を使用して、代わりに「ユーザー」モデルから開始します。

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


2


あるいは、実際には結合モデルであるジョブモデルを介して、プロジェクトからユーザーへのManyToManyリレーションを使用できます。

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

それから単純に:

project.users.all()