禁用GeoDjango Admin中的Openlayers地图

4
我正在使用带有Postgres/PostGIS (GeoDjango)的Django 1.6。我注意到当我从1.5升级到1.6时,我无法再通过管理页面添加WKT的空间数据。以前,我可以将要显示的几何图形的WKT粘贴到文本框中。现在,当我进入管理页面时,会显示一个地图,它确实允许我编辑几何图形,但我不能添加数据。
是否有一种简单的解决方法可让我禁用此地图的显示?
1个回答

10
您可以使用 formfield_overrides 覆盖任何管理员表单中使用的小部件。
来自 https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_overrides

ModelAdmin.formfield_overrides

这提供了一种快速简便的方法,用于在管理界面中重写 Field 选项。 formfield_overrides 是一个字典,将字段类映射到要在构建时传递给字段的参数字典。

因此,在您的情况下,您需要使用普通的文本字段来覆盖可爱的开放式图层地图。以下内容将为 GeoModel 模型中的任何 PointField 替换地图为文本输入框。
from app.models import GeoModel
from django.forms.widgets import TextInput
from django.contrib.gis.db import models
from django.contrib import admin

class DirectAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.PointField: {'widget': TextInput }
    }

admin.site.register(GeoModel, DirectAdmin)

你可能会发现使用文本区域可以更轻松地阅读WKT,所以将第二个导入更改为:

from django.forms.widgets import Textarea

在覆盖方法中使用它,而不是TextInput:

models.PointField: {'widget': Textarea }

谢谢,可爱的OpenLayers地图已经不再了!是否可以将框变大,以便您可以看到一块文本?例如,我粘贴的某些WKT非常长 - 看到全部内容会很好。 - djq
1
太好了,很高兴解决了这个问题。最简单的方法是将它更改为文本区域,我会编辑答案来展示这一点。 - Kip
1
在Django 2.0中遇到了问题,似乎无法覆盖PointField或PolygonField项目...已确认标准CharField被正确覆盖。是否有任何已知的更改会影响此操作? - monkut
请确保继承自django.contrib.admin.ModelAdmin而不是django.contrib.gis.admin.OSMGeoAdmin。我曾经犯过同样的错误。 - darkless

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接