/ / Postgres sql intersect with except relationnel division - django, postgresql, relationnel-division

Postgres sql se croise avec sauf division relationnelle - django, postgresql, division relationnelle

J'ai une table appelée groupes. Je veux retourner le numéro de groupe dont seuls John et Mary font partie.

Pensez à une application de chat, je veux voir si ces deux personnes existantes ont déjà un groupe avec SEULEMENT elles.

Group | user
1     | john
1     | mary
1     | dave
2     | john
2     | mary

Comment puis-je faire ceci?

Voici le modèle actuel

class Conversation(models.Model):
attendee = models.ManyToManyField(User)
guid = models.CharField(max_length=16)

Réponses:

1 pour la réponse № 1

Une réponse basée sur l'approche de @arocks, car l'annotation de @rocks est incorrecte.

Conversation.objects.annotate(user_count=Count("attendee")).filter(user_count=2, attendee__username="john").filter(attendee__username="mary")

Cela vous renverra un QuerySet de Conversation les objets qui ont 2 membres et les membres sont Marie et John

La raison pour laquelle vous devez vous séparer filter est, votre système de gestion de base de données doit créer des sous-tables temporaires car vous devez utiliser la même colonne de base de données username deux fois pour le filtrage. Vos données