from django.contrib.admin import ModelAdmin from django.contrib.gis.db import models from django.contrib.gis.forms import OSMWidget 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 GISModelAdmin(GeoModelAdminMixin, ModelAdmin): pass