Django: фильтрация по полю ("широта, долгота") - PullRequest
0 голосов
/ 05 марта 2010

Я храню широту и долготу в виде поля char ("широта, долгота"). Я предпочитаю оставить это так.

Мне нужно отфильтровать результаты, чтобы показать только широту> w, широту y, долготу

Как я могу сделать это без изменений, как я храню lat, long?

Ответы [ 2 ]

5 голосов
/ 05 марта 2010

Django ORM не сможет помочь вам отфильтровать это поле. Ваша схема не предназначена для того типа запроса, который вы пытаетесь.

Мои предложения:

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

  • Добавьте два новых числовых столбца и обновляйте / устанавливайте эти столбцы при каждом изменении модели. Вам также необходимо выполнить однократное массовое обновление, чтобы установить начальные значения для всех существующих строк.

  • Вы можете настроить пользовательский запрос SQL, который будет проходить через каждую строку и разбивать столбец, чтобы получить отдельные числовые значения для широты и долготы и отфильтровать их. В этом случае вы в значительной степени обходите ORM и самостоятельно переходите к SQL, и вам нужно будет использовать любые методы split, доступные в вашей базе данных (пользовательские функции split, регулярные выражения и т. Д.). Запрос будет медленным.

  • Добавьте в вашу модель метод, который будет разбивать строку в Python и возвращать числовые данные. Чтобы выполнить какую-либо фильтрацию, используйте эти данные, вам нужно извлечь все модели из вашей базы данных (дорого) и выполнить фильтрацию в памяти (быстро, но вы потеряете преимущества SQL и / или ORM). Эта опция, вероятно, не очень хорошо масштабируется.

Удачи ...

1 голос
/ 10 марта 2010

Как упомянул один из комментаторов, вам обязательно стоит взглянуть на Geodjango , который предлагает встроенную геоинформационную поддержку. Со своей страницы: GeoDjango - это дополнение для Django, которое превращает его в глобальную веб-среду мирового класса. GeoDjango стремится максимально упростить создание географических веб-приложений, таких как сервисы на основе определения местоположения. Некоторые функции включают в себя:

  • Поля модели Django для геометрий OGC, которые можно редактировать в админке.
  • Расширения в ORM Джанго для запросов и манипулирования пространственными данными.
  • Слабосвязанные высокоуровневые интерфейсы Python для операций с геометрией ГИС и форматов данных.
...