0

私は geoDjango で Django インストールを実行しており、次のようなモデルを作成しました:

#models.py
django.contrib.gis.db インポート モデルから

クラスルート(models.Model):
    名前 = models.CharField(max_length=100)

    パス = models.LineStringField(srid=4326)
    オブジェクト = models.GeoManager()

    def __unicode__(自己):
        str(self.path) を返す

これは機能し、端末内で折れ線オブジェクトを作成することができました。確かに、それらを実際に表示することはできませんでしたが、表示がまだ完全に終了していないためです。

しかし、その後、2008 年から、geodjango の作成者である bronn のスクリーンキャストを見ました。彼は管理ページで openlayer オープン ストリート マップ インターフェイスを取得し、彼の指示に従い、OSMGeoAdmin を使用して admin.py を追加すると、次のようになります。

#admin.py
django.contrib.gisインポート管理者から
from myproject.georoute.models import Route


クラス RouteAdmin(admin.OSMGeoAdmin):
    search_fields = ('名前',)

admin.site.register(ルート、RouteAdmin)

これも正常に動作しています - 折れ線を描画できるマップを取得しますが、それを保存しようとすると、または Route オブジェクトが既に作成されていて、管理ページで Route リストを表示しようとすると、エラーが発生します。より具体的には、「Unicodeへの強制:文字列またはバッファが必要、LineStringが見つかりました」と私が理解していることから、これは __ unicode__ 関数(またはこのようなもの)を持たないオブジェクトをユニコードしようとすることから来ています。

そこで、折れ線オブジェクトの定義を確認しましたが、Unicode 関数がなかったので、うまく追加できませんでした。

ここで私は困惑しています。この問題を解決する方法を知っている人はいますか?

スタックトレースを編集:

環境:

リクエスト方法: POST
リクエスト URL: http://storm.webfactional.com/admin/georoute/route/add/
ジャンゴのバージョン: 1.2.1
Python バージョン: 2.6.5
インストール済みアプリケーション:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.gis',
 'django.contrib.admin',
 '登録'、
 「ジオルート」]
インストール済みミドルウェア:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


トレースバック:
get_response のファイル「/home/storm/webapps/django/lib/python2.6/django/core/handlers/base.py」
  100. 応答 = コールバック(要求、*callback_args、**callback_kwargs)
ラッパーのファイル「/home/storm/webapps/django/lib/python2.6/django/contrib/admin/options.py」
  239. return self.admin_site.admin_view(view)(*args, **kwargs)
_wrapped_view のファイル「/home/storm/webapps/django/lib/python2.6/django/utils/decorators.py」
  76. response = view_func(リクエスト、*args、**kwargs)
_wrapped_view_func のファイル「/home/storm/webapps/django/lib/python2.6/django/views/decorators/cache.py」
  69. response = view_func(request, *args, **kwargs)
内部のファイル「/home/storm/webapps/django/lib/python2.6/django/contrib/admin/sites.py」
  190. return view(request, *args, **kwargs)
_wrapper のファイル「/home/storm/webapps/django/lib/python2.6/django/utils/decorators.py」
  21. return デコレータ(bound_func)(*args, **kwargs)
_wrapped_view のファイル「/home/storm/webapps/django/lib/python2.6/django/utils/decorators.py」
  76. response = view_func(リクエスト、*args、**kwargs)
bound_func 内のファイル「/home/storm/webapps/django/lib/python2.6/django/utils/decorators.py」
  17. return func(self, *args2, **kwargs2)
_commit_on_success のファイル「/home/storm/webapps/django/lib/python2.6/django/db/transaction.py」
  299. res = func(*args, **kw)
add_view のファイル「/home/storm/webapps/django/lib/python2.6/django/contrib/admin/options.py」
  800.self.log_addition(リクエスト、new_object)
log_addition のファイル「/home/storm/webapps/django/lib/python2.6/django/contrib/admin/options.py」
  428. object_repr = force_unicode(オブジェクト),
force_unicode のファイル「/home/storm/webapps/django/lib/python2.6/django/utils/encoding.py」
  66. s = ユニコード

例外の種類: TypeError at /admin/georoute/route/add/
例外値: Unicode への強制: 文字列またはバッファーが必要です。LineString が見つかりました
4

2 に答える 2

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

nameとして定義された管理ページをロードしCharField、モデル定義を に変更しましたLineStringField。ページを保存すると、同じエラーが発生しました。

そのため、データの問題だと思います-モデル定義はデータベースの列定義と一致していますか? そのテーブルを削除して、manage.py syncdbもう一度実行してみてください。

于 2010-07-17T03:28:24.183 に答える