Неправильная долгота / широта сохранена в PointField через виджет администратора - PullRequest
0 голосов
/ 30 мая 2018

У меня есть базовое GeoDjango PointField:

point = models.PointField(srid=4326, null=True)

При использовании администратора, я ожидал, что это будет сохранено в базе данных как (например, Лондон):

SRID=4326;POINT (-94.577597, 39.057294)

но вместо этого, если я наведу маркер на Лондон, я получу:

SRID=4326;POINT (-19067.91721243037 6711435.410105047)

Там, где долгота / широта далеко.

Я пытался вручную установить Point в местоположение:

obj.point = Point(-94.577597, 39.057294)
obj.save()

но виджет затем отображается в обратном направлении.

Так что кажется, что неправильная широта и долгота сохраняются в поле, или неправильная система координат

Я пытался вручную переопределить виджет, чтобы убедиться, что в виджете используется правильный SRID с:

class Meta:
    model = models.MyModel
    fields = "__all__"
    widgets = {
        'point': widgets.OSMWidget(attrs={
            'map_srid': 4326,
            'map_width': 800,
            'map_height': 500,
            'display_raw': True
        })
    }

, но не повезло.

У меня установлены все зависимости для GeoDjango, я включил расширение postgis в своей базе данных и использую правильный движок:

DATABASES['default']['ENGINE'] = 'django.contrib.gis.db.backends.postgis'

Я также добавил django.contrib.gis к INSTALLED_APPS.Я использую виджет формы по умолчанию, но мне интересно, может ли быть проблема с виджетом?

1 Ответ

0 голосов
/ 30 мая 2018

ОК, кажется, я забыл включить правильный класс администратора GeoDjango:

from django.contrib.gis import admin
from app import models

@admin.register(models.MyModel)
class MyAdmin(admin.OSMGeoAdmin):
    pass
...