summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorGiannis Adamopoulos <gadamopoulos@outlook.com>2020-12-09 19:12:56 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-09-17 08:56:16 +0200
commit4555aa0a489cb9dcf764edf12339097cdfa5ff84 (patch)
tree45862fd927ecc343590ed0827af911dd9002c266 /django
parentb5bf026813ca9aff83243f901edd722e0d60c2ea (diff)
Fixed #27674 -- Deprecated GeoModelAdmin and OSMGeoAdmin.
Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Diffstat (limited to 'django')
-rw-r--r--django/contrib/gis/admin/__init__.py8
-rw-r--r--django/contrib/gis/admin/options.py36
2 files changed, 42 insertions, 2 deletions
diff --git a/django/contrib/gis/admin/__init__.py b/django/contrib/gis/admin/__init__.py
index b0edaf0193..4abc4898ae 100644
--- a/django/contrib/gis/admin/__init__.py
+++ b/django/contrib/gis/admin/__init__.py
@@ -2,11 +2,15 @@ from django.contrib.admin import (
HORIZONTAL, VERTICAL, AdminSite, ModelAdmin, StackedInline, TabularInline,
action, autodiscover, display, register, site,
)
-from django.contrib.gis.admin.options import GeoModelAdmin, OSMGeoAdmin
+from django.contrib.gis.admin.options import (
+ GeoModelAdmin, GISModelAdmin, OSMGeoAdmin,
+)
from django.contrib.gis.admin.widgets import OpenLayersWidget
__all__ = [
'HORIZONTAL', 'VERTICAL', 'AdminSite', 'ModelAdmin', 'StackedInline',
'TabularInline', 'action', 'autodiscover', 'display', 'register', 'site',
- 'GeoModelAdmin', 'OSMGeoAdmin', 'OpenLayersWidget',
+ 'GISModelAdmin', 'OpenLayersWidget',
+ # RemovedInDjango50Warning.
+ 'GeoModelAdmin', 'OSMGeoAdmin',
]
diff --git a/django/contrib/gis/admin/options.py b/django/contrib/gis/admin/options.py
index 9b758a742d..524ba4bdc5 100644
--- a/django/contrib/gis/admin/options.py
+++ b/django/contrib/gis/admin/options.py
@@ -1,12 +1,38 @@
+import warnings
+
from django.contrib.admin import ModelAdmin
from django.contrib.gis.admin.widgets import OpenLayersWidget
from django.contrib.gis.db import models
+from django.contrib.gis.forms import OSMWidget
from django.contrib.gis.gdal import OGRGeomType
from django.forms import Media
+from django.utils.deprecation import RemovedInDjango50Warning
+
+
+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
+
+
+# RemovedInDjango50Warning.
spherical_mercator_srid = 3857
+# RemovedInDjango50Warning.
class GeoModelAdmin(ModelAdmin):
"""
The administration options class for Geographic models. Map settings
@@ -44,6 +70,15 @@ class GeoModelAdmin(ModelAdmin):
debug = False
widget = OpenLayersWidget
+ def __init__(self, *args, **kwargs):
+ warnings.warn(
+ 'django.contrib.gis.admin.GeoModelAdmin and OSMGeoAdmin are '
+ 'deprecated in favor of django.contrib.admin.ModelAdmin and '
+ 'django.contrib.gis.admin.GISModelAdmin.',
+ RemovedInDjango50Warning, stacklevel=2,
+ )
+ super().__init__(*args, **kwargs)
+
@property
def media(self):
"Injects OpenLayers JavaScript into the admin."
@@ -124,6 +159,7 @@ class GeoModelAdmin(ModelAdmin):
return OLMap
+# RemovedInDjango50Warning.
class OSMGeoAdmin(GeoModelAdmin):
map_template = 'gis/admin/osm.html'
num_zoom = 20