2014-02-25 157 views
7

我正在尋找使用Django的ORM來執行復雜的過濾器。

型號:Django過濾器對象至少有一個多對多具有值的屬性

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

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

我怎麼會查詢誰至少有一個暢銷書作家的所有?

查詢:

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




編輯:
按照documentation,下面應該工作:

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

不幸的是,這最終會返回重複的作者對象(他/她的每本暢銷書的同一作者,一遍又一遍)。

回答

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

filter()確實與BooksJOIN併產生所有行bestseller==Truedistinct()確保每個作者僅在結果中列出一次。

相關問題