Я запускаю установку Django с помощью geoDjango и создал такую модель:
#models.py
from django.contrib.gis.db import models
class Route(models.Model):
name = models.CharField(max_length=100)
path = models.LineStringField(srid=4326)
objects = models.GeoManager()
def __unicode__(self):
return str(self.path)
Это сработало, и я смог создать объекты линейных строк в терминале, и, по общему признанию, я так и не смог их реально отобразить, но это было больше с моим отображением, еще не полностью завершенным.
Но потом я увидел скринкаст, хотя с 2008 года с создателем геоджанго - бронном, где он получил открытый интерфейс карты улиц на странице администратора, и я следовал его инструкциям, добавляя admin.py с OSMGeoAdmin, заканчивающимся как это:
#admin.py
from django.contrib.gis import admin
from myproject.georoute.models import Route
class RouteAdmin(admin.OSMGeoAdmin):
search_fields = ('name',)
admin.site.register(Route, RouteAdmin)
Это также работает нормально - я получаю карту, на которой могу нарисовать линейную строку, но когда я пытаюсь ее сохранить - или если у меня уже есть объект Маршрут и пытаюсь просмотреть список Маршрутов на странице администратора - я получаю ошибка. В частности, "приведение к Unicode: нужна строка или буфер, LineString найдена" , и, насколько я понимаю, это происходит из-за попытки unicode-объекта, который не имеет функции __unicode__ (или что-то вроде этого).
Итак, я проверил определение объекта линейной строки, и не было никакой функции Юникода, поэтому я сделал слабую попытку добавить одну, но безуспешно.
Итак, я в тупике. Кто-нибудь знает, как я могу решить эту проблему?
редактировать
StackTrace:
Environment:
Request Method: POST
Request URL: http://storm.webfactional.com/admin/georoute/route/add/
Django Version: 1.2.1
Python Version: 2.6.5
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.gis',
'django.contrib.admin',
'registration',
'georoute']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/home/storm/webapps/django/lib/python2.6/django/core/handlers/base.py" in get_response
100. response = callback(request, *callback_args, **callback_kwargs)
File "/home/storm/webapps/django/lib/python2.6/django/contrib/admin/options.py" in wrapper
239. return self.admin_site.admin_view(view)(*args, **kwargs)
File "/home/storm/webapps/django/lib/python2.6/django/utils/decorators.py" in _wrapped_view
76. response = view_func(request, *args, **kwargs)
File "/home/storm/webapps/django/lib/python2.6/django/views/decorators/cache.py" in _wrapped_view_func
69. response = view_func(request, *args, **kwargs)
File "/home/storm/webapps/django/lib/python2.6/django/contrib/admin/sites.py" in inner
190. return view(request, *args, **kwargs)
File "/home/storm/webapps/django/lib/python2.6/django/utils/decorators.py" in _wrapper
21. return decorator(bound_func)(*args, **kwargs)
File "/home/storm/webapps/django/lib/python2.6/django/utils/decorators.py" in _wrapped_view
76. response = view_func(request, *args, **kwargs)
File "/home/storm/webapps/django/lib/python2.6/django/utils/decorators.py" in bound_func
17. return func(self, *args2, **kwargs2)
File "/home/storm/webapps/django/lib/python2.6/django/db/transaction.py" in _commit_on_success
299. res = func(*args, **kw)
File "/home/storm/webapps/django/lib/python2.6/django/contrib/admin/options.py" in add_view
800. self.log_addition(request, new_object)
File "/home/storm/webapps/django/lib/python2.6/django/contrib/admin/options.py" in log_addition
428. object_repr = force_unicode(object),
File "/home/storm/webapps/django/lib/python2.6/django/utils/encoding.py" in force_unicode
66. s = unicode(s)
Exception Type: TypeError at /admin/georoute/route/add/
Exception Value: coercing to Unicode: need string or buffer, LineString found