Сложный запрос в Джанго - PullRequest
       9

Сложный запрос в Джанго

1 голос
/ 19 февраля 2010

Слушай, у меня довольно сложный запрос, я не могу работать в django.

Моя модель называется Car (), и я хочу выполнить этот запрос на ней

query = "SELECT *, ((ACOS(SIN("+user_lat+" * PI() / 180) * SIN(lat * PI() / 180) + COS("+user_lat+" * PI() / 180) * COS(lat * PI() / 180) * COS(("+user_lon+" - lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance FROM app_car HAVING distance<='"+miles+"' ORDER BY distance ASC"

Любые идеи?

Спасибо

РЕДАКТИРОВАТЬ:

мой взгляд выглядит так

def find_cars_within_miles_from_postcode(request, miles, postcode=0):

    # create cursor for RAW query
    cursor = connection.cursor()

    # Get lat and lon from google
    lat, lon = getLonLatFromPostcode(postcode)

    # Gen query
    query = "SELECT id, ((ACOS(SIN("+lat+" * PI() / 180) * SIN(lat * PI() / 180) + COS("+lat+" * PI() / 180) * COS(lat * PI() / 180) * COS(("+lon+" - lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance FROM app_car HAVING distance<='"+miles+"' ORDER BY distance ASC"

    # execute the query
    cursor.execute(query)

    # grab all the IDS form the sql result
    ids = [row[0] for row in cursor.fetchall()]

    # find cars from ids
    cars = Car.objects.filter(id__in=ids)

    # return the Cars with these IDS
    return HttpResponse( cars )

Это возвращает мои автомобили с х количество миль, это работаетЧто ж.Однако необработанный запрос возвратил, как далеко они были от определенного местоположения, я думаю, что именем поля было «расстояние».

Как я могу вернуть это поле «расстояние» с моими автомобильными объектами?

Ответы [ 4 ]

1 голос
/ 19 февраля 2010

Взгляните на это ТАК сообщение . Он охватывает гео поиск, как вы хотите.

1 голос
/ 19 февраля 2010

Django ORM не поддерживает HAVING;для этого перейдите в DB-API.

0 голосов
/ 22 февраля 2010

Вам будет трудно вернуть значение расстояния внутри объекта QerySet (см. мой вопрос о том же ), по крайней мере, до Django 1.2.Самое простое - просто перенести ваш запрос в менеджер моделей, но вместо списка запросов вернуть список Python.Вы также можете посмотреть гео-библиотеку Python для обработки таких запросов.

0 голосов
/ 19 февраля 2010

Пользовательский метод raw () и этот SQL-запрос для получения объектов Cars.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...