Django3.0 : GDALException while accessing model form

571 views Asked by At

I am trying to save shops with the geo locations in Django project. And I am able to save the data from admin UI but getting exception when I access the saved data.

In my django app (shop) I have following models.py

from django.contrib.gis.db import models

class Shop(models.Model):
    name = models.CharField(max_length=100)
    location = models.PointField()
    address = models.CharField(max_length=100)
    city = models.CharField(max_length=50)

I have installed django-leaflet settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.gis',
    'leaflet',
    'shops'
]

admin.py looks like this

#from django.contrib import admin
from django.contrib.gis import admin
from .models import Shop
from leaflet.admin import LeafletGeoAdmin


class ShopAdmin(LeafletGeoAdmin):
    list_display = ('name', 'location')

admin.site.register(Shop, ShopAdmin)

From admin UI I am able to create shop but when I try to open any shop to view saved data I see following exception

enter image description here

Environment:


Request Method: GET
Request URL: http://localhost:8000/admin/shops/shop/16/change/

Django Version: 3.0.6
Python Version: 3.7.7
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.gis',
 'leaflet',
 'shops']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template F:\workspaces\Django\env\lib\site-packages\django\contrib\admin\templates\admin\includes\fieldset.html, error at line 19
   OGR failure.
   9 :             {% for field in line %}
   10 :                 <div{% if not line.fields|length_is:'1' %} class="fieldBox{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>
   11 :                     {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
   12 :                     {% if field.is_checkbox %}
   13 :                         {{ field.field }}{{ field.label_tag }}
   14 :                     {% else %}
   15 :                         {{ field.label_tag }}
   16 :                         {% if field.is_readonly %}
   17 :                             <div class="readonly">{{ field.contents }}</div>
   18 :                         {% else %}
   19 :                              {{ field.field }} 
   20 :                         {% endif %}
   21 :                     {% endif %}
   22 :                     {% if field.field.help_text %}
   23 :                         <div class="help">{{ field.field.help_text|safe }}</div>
   24 :                     {% endif %}
   25 :                 </div>
   26 :             {% endfor %}
   27 :         </div>
   28 :     {% endfor %}
   29 : </fieldset>


Traceback (most recent call last):
  File "F:\workspaces\Django\env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "F:\workspaces\Django\env\lib\site-packages\django\core\handlers\base.py", line 145, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "F:\workspaces\Django\env\lib\site-packages\django\core\handlers\base.py", line 143, in _get_response
    response = response.render()
  File "F:\workspaces\Django\env\lib\site-packages\django\template\response.py", line 105, in render
    self.content = self.rendered_content
  File "F:\workspaces\Django\env\lib\site-packages\django\template\response.py", line 83, in rendered_content
    return template.render(context, self._request)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\backends\django.py", line 61, in render
    return self.template.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 171, in render
    return self._render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 163, in _render
    return self.nodelist.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 163, in _render
    return self.nodelist.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 163, in _render
    return self.nodelist.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\defaulttags.py", line 209, in render
    nodelist.append(node.render_annotated(context))
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\loader_tags.py", line 188, in render
    return template.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 173, in render
    return self._render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 163, in _render
    return self.nodelist.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\defaulttags.py", line 209, in render
    nodelist.append(node.render_annotated(context))
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\defaulttags.py", line 209, in render
    nodelist.append(node.render_annotated(context))
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\defaulttags.py", line 309, in render
    return nodelist.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\defaulttags.py", line 309, in render
    return nodelist.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 936, in render
    bit = node.render_annotated(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 903, in render_annotated
    return self.render(context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 992, in render
    return render_value_in_context(output, context)
  File "F:\workspaces\Django\env\lib\site-packages\django\template\base.py", line 971, in render_value_in_context
    value = str(value)
  File "F:\workspaces\Django\env\lib\site-packages\django\utils\html.py", line 373, in <lambda>
    klass.__str__ = lambda self: mark_safe(klass_str(self))
  File "F:\workspaces\Django\env\lib\site-packages\django\forms\boundfield.py", line 33, in __str__
    return self.as_widget()
  File "F:\workspaces\Django\env\lib\site-packages\django\forms\boundfield.py", line 96, in as_widget
    renderer=self.form.renderer,
  File "F:\workspaces\Django\env\lib\site-packages\django\forms\widgets.py", line 241, in render
    context = self.get_context(name, value, attrs)
  File "f:\workspaces\django\env\src\django-leaflet\leaflet\forms\widgets.py", line 78, in get_context
    context = super(LeafletWidget, self).get_context(name, value, attrs)
  File "F:\workspaces\Django\env\lib\site-packages\django\contrib\gis\forms\widgets.py", line 67, in get_context
    'serialized': self.serialize(value),
  File "f:\workspaces\django\env\src\django-leaflet\leaflet\forms\widgets.py", line 40, in serialize
    return value.geojson if value else ''
  File "F:\workspaces\Django\env\lib\site-packages\django\contrib\gis\geos\geometry.py", line 387, in json
    return self.ogr.json
  File "F:\workspaces\Django\env\lib\site-packages\django\contrib\gis\geos\geometry.py", line 429, in ogr
    return gdal.OGRGeometry(self._ogr_ptr(), self.srs)
  File "F:\workspaces\Django\env\lib\site-packages\django\contrib\gis\geos\geometry.py", line 436, in srs
    return gdal.SpatialReference(self.srid)
  File "F:\workspaces\Django\env\lib\site-packages\django\contrib\gis\gdal\srs.py", line 92, in __init__
    self.import_epsg(srs_input)
  File "F:\workspaces\Django\env\lib\site-packages\django\contrib\gis\gdal\srs.py", line 277, in import_epsg
    capi.from_epsg(self.ptr, epsg)
  File "F:\workspaces\Django\env\lib\site-packages\django\contrib\gis\gdal\prototypes\errcheck.py", line 117, in check_errcode
    check_err(result, cpl=cpl)
  File "F:\workspaces\Django\env\lib\site-packages\django\contrib\gis\gdal\error.py", line 59, in check_err
    raise e(msg)

Exception Type: GDALException at /admin/shops/shop/16/change/
Exception Value: OGR failure.

But When I change My admin.py with following I see the map but ugly view

from django.contrib.gis import admin
from .models import Shop
from leaflet.admin import LeafletGeoAdmin

class ShopAdmin(admin.GeoModelAdmin):
    list_display = ('name', 'location')

admin.site.register(Shop, ShopAdmin)

enter image description here

1

There are 1 answers

0
biodiv On

I have a similar issue. Check your GDAL version with

gdalinfo --version
GDAL 3.0.4, released 2020/01/28

Support for GDAL 3.x has just been added to django but has not yet been released as of 5/13/2020: look here

Probably, if you for testing purposes only (!) switch lat and long in your input to GEOSGeometry, it will work again. AxisOrder and AxisMappingStrategy is something new in the mentioned fix.