Retourneer een django-gebruiker die zich in de veel-op-veel-velden van twee modellen bevindt

Ik heb de modellen:

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

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

Ik zou graag alle gebruikers die knoopmedewerkers zijn en ook een projectmedewerker willen zijn, ervan uitgaande dat ik de pk van het knooppunt heb. Welke vraag heb ik daarvoor nodig?

2

1 antwoord

from django.db.models import F
User.objects.filter(node__pk=node.pk, project=F('node__project'))

Dat zou moeten werken. Heb het niet getest. Zo niet, dan kunt u deze ook proberen:

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

Ervan uitgaande dat ze beide werken, wil je beide misschien proberen in bijvoorbeeld django-debug-toolbar debugsqlshell beheeropdracht om te zien welk type query elk produceert en welke mogelijk efficiënter is.

1
toegevoegd