Как сделать в Django запрос, упорядоченный по строке latlng

Текущая ситуация

Я получаю данные, которые содержат строки, представляющие широту местоположения... например 30.78829892811801,31.2769004988329 30.78848118485095,31.27649189363398 30.78869531217787,31.27615745128788 и т.д.

Что я пробовал

сейчас я делаю Django запрос типа ModelName.objects.all().order_by('latlng'), но он не упорядочивает его, так как поле просто Charfield . также преобразование его в double не работает, так как оно содержит 2 разных двойника, разделенных запятой.

Что мне нужно сделать

Есть ли способ преобразовать эту строку в LatLng, которую можно упорядочить по местоположению или что-то подобное?

Вы используете Postgres? Если да, то вы можете использовать ArrayField для разделения вашей строки на массив, что может сделать ее более легко сортируемой в ORM.

from django.db.models import F, Value, DecimalField
from django.db.models.expressions import Func
from django.contrib.postgres.fields import ArrayField

latlng_arr_func = Func(
    F('latlng'),
    Value(","),
    function='regexp_split_to_array', output=ArrayField(DecimalField())
)

ModelName.objects.annotate(latlng_arr=latlng_arr_func).order_by('-latlng_arr')

Затем вызов object.latlng_arr должен дать список ваших значений [30.78829892811801,31.2769004988329].

Если это не даст вам желаемого результата, я бы предложил либо разделить данные на два десятичных поля в вашей модели (вы можете сохранить строковую версию), либо упорядочить данные с помощью Python.

Вернуться на верх