Вот ваша недостающая функция. Передайте ему набор запросов и имя столбца, для которого вы хотите найти медиану:
def median_value(queryset, term):
count = queryset.count()
return queryset.values_list(term, flat=True).order_by(term)[int(round(count/2))]
Это было не так сложно, как показывают некоторые другие ответы. Важно, чтобы сортировка БД выполняла всю работу, поэтому, если у вас уже есть индексированный столбец, это очень дешевая операция.
(обновление от 28.01.2016)
Если вы хотите быть более строгими в определении медианы для четного числа элементов, это будет усреднять вместе значение двух средних значений.
def median_value(queryset, term):
count = queryset.count()
values = queryset.values_list(term, flat=True).order_by(term)
if count % 2 == 1:
return values[int(round(count/2))]
else:
return sum(values[count/2-1:count/2+1])/Decimal(2.0)