Django Classificar por campo calculado

Usando a lógica da distância deeste post SO, Estou recebendo de volta um conjunto de objetos filtrado corretamente com este código:

class LocationManager(models.Manager):
    def nearby_locations(self, latitude, longitude, radius, max_results=100, use_miles=True):
        if use_miles:
            distance_unit = 3959
        else:
            distance_unit = 6371

        from django.db import connection, transaction
        cursor = connection.cursor()

        sql = """SELECT id, (%f * acos( cos( radians(%f) ) * cos( radians( latitude ) ) *
        cos( radians( longitude ) - radians(%f) ) + sin( radians(%f) ) * sin( radians( latitude ) ) ) )
        AS distance FROM locations_location HAVING distance < %d
        ORDER BY distance LIMIT 0 , %d;""" % (distance_unit, latitude, longitude, latitude, int(radius), max_results)
        cursor.execute(sql)
        ids = [row[0] for row in cursor.fetchall()]

        return self.filter(id__in=ids)

O problema é que não consigo descobrir como manter a lista / conjunto de consultas classificadas pelo valor da distância. Não quero fazer isso como uma chamada de método extra () por razões de desempenho (uma consulta versus uma consulta em cada local potencial no meu banco de dados). Algumas perguntas:

Como posso classificar minha lista por distância? Mesmo tirando a classificação nativa que defini no meu modelo e usando "order_by ()", ainda está classificando por outra coisa (id, acredito).Estou errado sobre o desempenho e o Django otimiza a consulta, então devo usar extra ()?Essa é a maneira totalmente errada de fazer isso e eu devo usar a biblioteca geográfica em vez de rodar manualmente como um putz?

questionAnswers(1)

yourAnswerToTheQuestion