AG
courses = Courses.get_public_qs().select_related("category").filter(**qs_kwargs)...
а дальше, работаешь с данными, как тебе надо:data = {}Запрос будет один.
for course in courses:
if data.get(course.category_id) is None:
data[course.category_id] = []
data[course.category_id].append(course)
А чтобы ускорить обработку, надо уменьшить кол-во получаемых данных через перечесление нужных полей:
.only()
| .values()
| .values_list()
и работать со структурами попроще джанго-моделей