我正在尝试使用 Django 项目中的地理位置来保存商店。而且我能够从管理 UI 中保存数据,但是当我访问保存的数据时出现异常。
在我的 django 应用程序(商店)中,我有以下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)
我已经安装了 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看起来像这样
#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)
从管理 UI 我可以创建商店,但是当我尝试打开任何商店以查看保存的数据时,我看到以下异常
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.
但是当我更改我的admin.py时,我看到了地图,但视图很丑
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)