通过管理窗口小部件

时间:2018-05-30 16:54:57

标签: django geodjango

我有一个基本的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 :(得分:1)

好的,似乎我忘了包含正确的GeoDjango Admin类:

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

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