Как установить default_lon, default_lat для страницы администратора с помощью GISModelAdmin
Как установить default_lon, default_lat и default_zoom для поля PointField на странице администратора django с помощью класса GISModelAdmin?
При использовании следующего кода страница администратора загружается правильно, но с расположением по умолчанию в Европе.
model.py
from django.contrib.gis.db import models
class Enclosure(models.Model):
location = models.PointField()
name = models.CharField(max_length=15)
admin.py
from .models import Enclosure
@admin.register(Enclosure)
class EnclocusreAdmin(GISModelAdmin):
pass
Я попробовал следующий код, чтобы попытаться установить lat, lon по умолчанию для виджета. Однако это приводит к тому, что карта не отображается для поля PointField на странице администратора.
admin.py
from .models import Enclosure
@admin.register(Enclosuer)
class EnclosureAdmin(GISModelAdmin):
gis_widget_kwargs = {'attrs': {
'default_lon': 50,
'default_lat': 100,}}
Соответствующий код Django имеет вид
class GISModelAdmin(GeoModelAdminMixin, ModelAdmin):
pass
class GeoModelAdminMixin:
gis_widget = OSMWidget
gis_widget_kwargs = {}
def formfield_for_dbfield(self, db_field, request, **kwargs):
if (
isinstance(db_field, models.GeometryField) and
(db_field.dim < 3 or self.gis_widget.supports_3d)
):
kwargs['widget'] = self.gis_widget(**self.gis_widget_kwargs)
return db_field.formfield(**kwargs)
else:
return super().formfield_for_dbfield(db_field, request, **kwargs)
class OSMWidget(OpenLayersWidget):
"""
An OpenLayers/OpenStreetMap-based widget.
"""
template_name = 'gis/openlayers-osm.html'
default_lon = 5
default_lat = 47
default_zoom = 12
def __init__(self, attrs=None):
super().__init__()
for key in ('default_lon', 'default_lat', 'default_zoom'):
self.attrs[key] = getattr(self, key)
if attrs:
self.attrs.update(attrs)
Подклассификация GISModelAdmin
, похоже, работает: В admin.py
from django.contrib.gis import admin
from .models import Enclosure
class CustomGeoWidgetAdmin(admin.GISModelAdmin):
gis_widget_kwargs = {
'attrs': {
'default_zoom': 11,
'default_lon': 50,
'default_lat': 100,
},
}
@admin.register(Enclosure)
class EnclosureAdmin(CustomGeoWidgetAdmin):
pass