2010-07-16 92 views
0

我正在一個Django的安裝與GeoDjango內置,並創造了這樣一個模型:GeoDjango內置 - 強迫爲Unicode:需要字符串或緩衝區,LineString的發現

#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年開始,geodjango的創建者 - 布蘭恩,他在管理頁面上獲得了一個開放式的開放式街道地圖接口,我按照他的說明添加了一個帶有OSMGeoAdmin結尾的admin.py像這樣:

#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) 

這也是做工精細 - 我得到的地圖上,我可以得出一個線串,但是當我試圖挽救它 - 或者,如果我已經創建了一個路由對象,並嘗試查看adminpage上的路由列表 - 我收到一個錯誤。更具體地說,「強制轉換爲Unicode:需要字符串或緩衝區,LineString找到」並且據我所知,這來自於嘗試對沒有__ unicode__函數(或類似的東西)的對象進行unicode編碼。

所以我檢查了線串對象的定義,並沒有unicode函數,所以我做了一個微弱的嘗試添加一個,沒有運氣。

因此,我在這裏,難倒了。任何人都知道我可以如何解決這個問題?

編輯 堆棧跟蹤:

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 
+1

您可以發佈完整的堆棧跟蹤? – godswearhats 2010-07-16 19:15:24

+0

編輯並添加堆棧跟蹤 – useless 2010-07-16 23:06:44

回答

0

我能夠通過以下複製你的堆棧跟蹤:

from django.contrib.gis.db import Models 
# model from the tutorial 
class WorldBorders(models.Model): 
    #name = models.CharField(max_length=50) 
    name = models.LineStringField(srid=4326) 
    ... 
    def __unicode__(self): 
     return self.name 

我裝管理員頁面定義爲CharFieldname,再變模型定義爲LineStringField。當我保存頁面時,我得到了同樣的錯誤。

因此,我懷疑這是一個數據問題 - 您的模型定義是否與數據庫中的列定義匹配?您可以嘗試刪除該表並再次運行manage.py syncdb

+0

感謝您的提示,但我已嘗試刪除,刷新,重置數據庫多次,錯誤仍然出現。任何其他想法?:S – useless 2010-07-18 21:57:22

1

無需尋找其他方式,塞思是可靠的!

def unicode函數需要一個字符串。所以你必須在'return'部分放置一個Character類型的字段。

這應該工作:

from django.contrib.gis.db import Models 
# model from the tutorial 
class WorldBorders(models.Model): 
    name = models.CharField(max_length=50) 
    path = models.LineStringField(srid=4326) 
    ... 
    def __unicode__(self): 
     return self.name 
相關問題