Ho questo modello nel mio codice:Come filtrare il modello django con i suoi oggetti nel campo molti-a-molti (corrispondenza esatta)?
class Conversation(models.Model):
participants = models.ManyToManyField(User, related_name="message_participants")
e ho bisogno di filtrare questa "conversazione" oggetti del modello dai molti-a-molti campo "partecipanti". significato: ho per esempio 3 oggetti utente, quindi voglio recuperare gli unici oggetti "Conversazione" che ha questo 3 utenti nel suo campo "partecipanti".
Ho provato a fare questo:
def get_exist_conv_or_none(sender,recipients):
conv = Conversation.objects.filter(participants=sender)
for rec in recipients:
conv = conv.filter(participants=rec)
in cui il mittente è un oggetto d'uso e "destinatari" è un elenco di oggetti Utente. non solleverà l'errore ma mi darà l'oggetto di conversazione sbagliato. Grazie.
edit: Una più recente provare mi ha portato a questo:
def get_exist_conv_or_none(sender,recipients):
participants=recipients
participants.append(sender)
conv = Conversation.objects.filter(participants__in=participants)
return conv
che hanno sostanzialmente lo stesso problema. Produce oggetti che ha uno o più "partecipanti" nella lista. ma quello che sto cercando è la corrispondenza esatta dell'oggetto molti-a-molti. Significato, un oggetto con gli "utenti" esatti sulla sua relazione molti-a-molti.
modifica 2: Il mio ultimo tentativo. ancora, non funzionerà.
def get_exist_conv_or_none(sender,recipients):
recipients.append(sender)
recipients = list(set(recipients))
conv = Conversation.objects.annotate(count=Count('participants')).filter(participants=recipients[0])
for participant in recipients[1:]:
conv.filter(participants=participant)
conv.filter(count=len(recipients))
return conv
questo è anche qui [domanda] (http://stackoverflow.com/questions/13435394/get-instance-by-exact-m2m-values/13435503#13435503) – PepperoniPizza
La risposta è incompleta. Devo abbinare esattamente gli utenti. significato recuperare un oggetto di conversazione che ha gli utenti che voglio in esso molti-a-molti esattamente, non meno, non di più. – SnirD