options.py 689 B

123456789101112131415161718192021
  1. from django.contrib.admin import ModelAdmin
  2. from django.contrib.gis.db import models
  3. from django.contrib.gis.forms import OSMWidget
  4. class GeoModelAdminMixin:
  5. gis_widget = OSMWidget
  6. gis_widget_kwargs = {}
  7. def formfield_for_dbfield(self, db_field, request, **kwargs):
  8. if isinstance(db_field, models.GeometryField) and (
  9. db_field.dim < 3 or self.gis_widget.supports_3d
  10. ):
  11. kwargs["widget"] = self.gis_widget(**self.gis_widget_kwargs)
  12. return db_field.formfield(**kwargs)
  13. else:
  14. return super().formfield_for_dbfield(db_field, request, **kwargs)
  15. class GISModelAdmin(GeoModelAdminMixin, ModelAdmin):
  16. pass