@NyxDeveloper

Как сделать аннотацию вычисляемого поля Django?

Необходимо отсортировать массив данных по расстоянию от текущего местоположения. У объектов есть ссылка на адрес, который имеет долготу и широту. Я пытаюсь создать дополнительные поля путем расчета по формуле:
√((х А – х В) 2 + (у А – у В) 2)

У меня получается следующий код:
queryset.annotate(distance=((longitude - F("address__longitude")) * 2) + ((latitude - F("address__latitude")) * 2)).order_by("distance")

Где longitude - теккущия долгота, а latitude - текущая широта. Но вылетает ошибка
Expression contains mixed types: FloatField, DecimalField. You must set output_field.
но я не знаю куда добавить этот атрибут.
Как правильно создать такое поле?
  • Вопрос задан
  • 34 просмотра
Решения вопроса 1
@pyHammer
from django.db.models import ExpressionWrapper, F


queryset.annotate(
    distance=ExpressionWrapper(
        expression=((1 - F("address__longitude")) * 2) + ((1 - F("address__latitude")) * 2),
        output_field=models.FloatField,
    ),
) \
.order_by("distance")


P. S. Не занимайтесь такой фигней, для этого есть PostGIS
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы