Taking the example from: http://docs.djangoproject.com/en/dev/topics/db/aggregation/#filter-and-exclude
Publisher.objects.filter(book__rating__gt=3.0).annotate(num_books=Count('book'))
Is there anyway to have the filter only apply to the annotation, so it would return all publishers, with some having a num_books=0?
You can use the annotation variable in the filter.
publishers=Publisher.objects.annotate(num_books=Count('book')).filter(num_books__gte=2)
Hm, I think you have to use an extra clause:
Publisher.objects.extra(select={ 'num_books': 'SELECT COUNT(*) ' + \ 'FROM <your_app>_book ' + \ 'WHERE <your_app>_book.publisher_id = ' + \ '<your_app>_publisher.id AND ' + \ 'rating > 3.0' })
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With