2014-02-25 7 views
7

Ich möchte einen komplexen Filter mit Djangos ORM erstellen.

Modelle:Django-Filterobjekte mit mindestens einem Viele-zu-Viele mit Attributwert

class Book(models.Model): 
    title = models.TextField() 
    bestseller = models.BooleanField(default=False) 

class Author(models.Model): 
    name = models.TextField() 
    books = models.ManytoManyField(Book) 

Wie würde ich für alle Autoren abfragen, die mindestens ein Bestseller-Buch haben?

Abfrage:

best_authors = Author.objects.filter(<relevant filter>) 




Edit:
Nach dem documentation sollten folgende Arbeiten:

best_authors = Author.objects.filter(books__bestseller=True) 

Leider endet die Rückgabe von wiederholten Autorenobjekten (immer und immer wieder der gleiche Autor für jedes Bestsellerbuch).

Antwort

5
best_authors = Author.objects.filter(books__bestseller=True).distinct() 

Die filter() hat eine JOIN mit dem Books Tisch und produziert alle Zeilen, in denen bestseller==True. Die distinct() stellt sicher, dass jeder Autor nur einmal in den Ergebnissen aufgeführt ist.

Verwandte Themen