Как мне сделать эту модель базы данных в Django? - PullRequest
1 голос
/ 31 марта 2010

Django в настоящее время не поддерживает тип данных "Point" в MySQL. Вот почему я создал свой собственный.

class PointField(models.Field):
    def db_type(self):
        return 'Point'

class Tag(models.Model):
    user = models.ForeignKey(User)
    utm = PointField()

Как видите, это работает, и syncdb прекрасно создает модель.

Однако мой текущий код вычисляет длину между двумя точками с использованием необработанного SQL.

cursor.execute("SELECT user_id FROM life_tag WHERE\
              (GLength(LineStringFromWKB(LineString(asbinary(utm), asbinary(PointFromWKB(point(%s, %s)))))) < 55)...

Это говорит: выберите, где длина между данной точкой и точкой таблицы меньше 55.

Как я могу сделать это с Django вместо RAW SQL? Я больше не хочу делать курсоры и операторы SELECT. Как я могу изменить файл models.py для этого?

1 Ответ

0 голосов
/ 31 марта 2010

Ваш вопрос немного неясен - вы просто спрашиваете, как рассчитать расстояние между двумя точками? Или вы надеетесь, что ORM даст вам некоторую функциональность для этого?

Если последнее, то это не произойдет без какой-либо внешней помощи; геометрия и география выходят за рамки наиболее типичных систем отображения баз данных. Вы всегда можете использовать автоматические сопоставления, чтобы получить интересующие вас свойства и сравнить их вручную, используя Пифагор или что-то еще; там нет SQL.

Что касается «внешней помощи», которую я упомянул, вы можете посмотреть на GeoDjango , которая может быть вам полезна. (Существует также GeoAlchemy для людей с похожими проблемами, но не использующими Django для ORM.)

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