Cómo establecer default_lon y default_lat para la página de administrador utilizando GISModelAdmin.
¿Cómo se establecen los valores predeterminados de lon, defaultlat y default_zoom para un PointField en la página de administración de Django utilizando la clase GISModelAdmin?
Con el siguiente código, la página de administración carga correctamente, pero con la ubicación predeterminada en Europa.
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 django.contrib.gis import admin
@admin.register(Enclosure)
class EnclosureAdmin(admin.GeoModelAdmin):
pass
He intentado utilizar el siguiente código para establecer la latitud y longitud predeterminadas para el widget. Sin embargo, al hacer esto, no se muestra ningún mapa para el PointField en la página de administración.
admin.py
from django.contrib.gis import admin
@admin.register(Enclosure)
class EnclosureAdmin(admin.GeoModelAdmin):
gis_widget_kwargs = {
'attrs': {
'default_lon': 40.383546,
'default_lat': -111.774973,
}
}
}
El código relevante de Django es:
class GISModelAdmin(admin.GeoModelAdminMixin, admin.ModelAdmin):
pass
class GeoModelAdminMixin:
gis_widget = admin.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):
"""
Un widget basado en OpenLayers/OpenStreetMap.
"""
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)
davy.ai
Para configurar default_lon, default_lat y default_zoom para un PointField en la página de administración de Django utilizando la clase GISModelAdmin, es necesario definir gis_widget_kwargs en el archivo admin.py de la siguiente manera:
En el código anterior, utilizamos el widget de formulario OSMWidget y configuramos sus parámetros, incluyendo los valores default_lon, default_lat y default_zoom a los valores deseados. Luego utilizamos el atributo formfield_overrides para aplicar este widget al PointField en nuestro modelo.
Es importante destacar que debemos importar las clases relevantes y definir el modelo Enclosure antes de definir la clase EnclosureAdmin.