2011-01-11 4 views
1

Ich habe zwei Modelle. Ein Artist Modell und ein Album Modell. Es gibt eine ManyToManyField Verbindung der beiden, da ein Album mehr als einen Künstler haben kann (Kollaborationen und dergleichen).Viele-zu-viele-Beziehungen: Abfragen von Objekten mit einem einzelnen Wert

Das Problem, das ich habe, ist, wenn ich eine einfache Album.objects.filter(artists=1)-Typ-Abfrage, es zeigt voraussichtlich alle Album Objekte, die diesen Künstler zugeschrieben haben. Ich möchte alle Alben finden, in denen dieser Künstler der einzige Künstler ist (ihre Veröffentlichungen, keine Kollaborationen).

(Ich bin nicht vertraut mit der extra() Klausel, aber ich bin sicher, dass es etwas haben könnte, mit der Lösung, dies zu tun, so dass jede Hilfe zu diesem Zweck wird sehr geschätzt.)

Antwort

4
Album.objects.annotate(n_artists=Count("artists')).filter(n_artists=1).filter(artist=some_awesome_artist) 

Grundsätzlich besteht die Idee darin, alle Alben zu finden, die genau einen Künstler haben (durch Kommentieren und Filtern) und dann nach unten filtern.

Verwandte Themen