topfifty = Player.objects.order_by('-score')[:50]
Player.objects.filter(sex='male',pk__in=topfifty).aggregate(avglevel=Avg('level'))
edit: я не проверял это, но я думаю, вы поняли, куда я иду.
topfifty = Player.objects.order_by('-score')[:50]
ids = []
for t in topfifty:
ids += [t.id]
Player.objects.filter(sex='male',pk__in=ids).aggregate(avglevel=Avg('level'))
Это немного хакерски, но лучшее, что я могу придумать. возможно, рассмотрите возможность фильтрации для мужчин и взятия 50 лучших мужчин вместо этого, который берет лучшие 50 и затем отфильтровывает мужчин.