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 № 1Une 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