Как установить 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
Вернуться на верх