>>> from game.models import *原因を調べていてわかったのですが、Python 2.5系列では__repr__()がunicodeを返すようにしてしまうとトラブルの元になってしまうようです。
>>> hts = HeroTemplate.all()
>>> ht = hts.fetch(1)[0]
>>> ht.template_name #問題なし
>>> ht.name #問題なし
>>> hero = Hero(
... name=ht.name,
... symbol=ht.symbol,
... max_life=ht.max_life,
... life=ht.max_life,
... max_move=ht.max_move,
... move=ht.max_move,
... weapon=None,
... item=None,
... )
>>> hero #ここでUnicodeEncodeError
>>> ht.createHero() #上記と同じ処理をやるメソッド、これもUnicodeEncodeError
参考にしたサイト:
http://d.hatena.ne.jp/alisue/20090402/1238690818
たとえば、
>>> class Abesi:これを実行するとabesiを表示しようとしたタイミングでエラーになります。環境はWindowsXP上のCygwin 1.7 + Python 2.5.4で、ターミナル上ではshift_jisを使っています。始めっからターミナルがutf-8を扱えるような環境なら__repr__()でunicodeを返しても上手くいくかもしれません。
... def __repr__(self):
... return u'¥u3059¥u305a¥u304d¥u3044¥u3061¥u308d¥u30fc'
...
>>> abesi = Abesi()
>>> abesi #UnicodeEncodeError
しかしながらどこの環境でも動くとはいいがたい状態なので、
- __str__()と__repr__()はstrを返す
- __unicode__()はunicodeを返す
■っていうかそもそも
Djangoのdjango.db.models.Modelクラスは特にオーバーライドしなくても綺麗な__repr__()を出力してくれるので、デフォルトの__repr__()を使えばよかった><

0 コメント:
コメントを投稿