Проблему решил, хоть и не очень нравящимся мне способом. не чувствую от него удовлетворения ;)
до этого момента на дев версия была на SQLite, ради удобства. Пришлось перейти на PostgreSQL ради улучшенного .distinct().
теперь вьюха выглядит примерно так:
class BooksSummary(DetailView):
model = BookSummary
def get_context_data(self, **kwargs):
context = super(BooksSummary, self).get_context_data(**kwargs)
context['books'] = self.object.book_set.all()
context['series'] = self.object.bookseries_set.all()\
.select_related('series',
'book',
'booksummary')\
.order_by('series')\
.distinct('series')
return context