Вернуть пользователя django, который находится в полях «многие ко многим» двух моделей - PullRequest
2 голосов
/ 06 декабря 2011

У меня есть модели:

class Project(models.Model):
    project_collaborators = models.ManyToManyField(User)

class Node(models.Model):
    collaborators = models.ManyToManyField(User)
    project = models.ForeignKey(Project)

Я хотел бы получить всех пользователей, которые являются соавторами узла, а также соавторами проекта, при условии, что у меня есть pk узла.Какой запрос мне понадобится для этого?

1 Ответ

1 голос
/ 06 декабря 2011
from django.db.models import F
User.objects.filter(node__pk=node.pk, project=F('node__project'))

Что должно работать.Не проверял это.Если нет, вы также можете попробовать это:

User.objects.filter(node__pk=node.pk, project__node__pk=node.pk)

Предполагая, что они оба работают, вы можете попробовать оба в чем-то вроде django-debug-toolbar 'debugsqlshell команда управления, чтобы увидеть, какой запрос производит каждый, а какой может быть более эффективным.

...