Джанго: доступ к модели через другую модель - PullRequest
4 голосов
/ 05 декабря 2009
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 ]

4 голосов
/ 05 декабря 2009

Используйте Синтаксис соединения Django и начинайте с вашей User модели:

users = User.objects.filter(job_set__project=project).distinct()
2 голосов
/ 06 декабря 2009

В качестве альтернативы, вы можете использовать отношение ManyToMany от Project к User через модель Job, которая фактически является моделью соединения:

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

А потом просто сделайте:

project.users.all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...