2012-02-02 1 views
2

Возможно ли это в Django? Без этой функции использование ORM выглядит странно.Как фильтровать объекты по количеству объектов ForeignKey БЕЗ использования необработанного SQL?

+1

Поиск хорошее место начать. Я думаю, что это задавали не один раз. –

+0

И каждый ответ (который я видел) включает в себя необработанный SQL. – SuitUp

+0

естественно после того, как я ответил ... рядом с дубликатом http://stackoverflow.com/questions/1889176/filtering-the-aggregate-in-the-django-orm – istruble

ответ

2

Есть на самом деле два раздела агрегации документации Django называемых filtering on annotations и order_by(), что вы должны получить то, что вам нужно:

books_w_author_count = Book.objects.annotate(num_authors=Count('authors')) 

# just a filter by number of objects 
books_w_author_count.filter(num_authors__gt=1) 

# just ordering on the count 
books_w_author_count.order_by('num_authors') 

class Author(modules.Model): 
    # ... 

class Book(models.Model): 
    # ... 
    authors = models.ManyToManyField(Author) 
1

Это можно использовать с помощью функции anotate. Here вы можете найти пример

И документы here