「'str' object has no attribute '_meta'」にはまりました。。。orz

ひさびさのPythonってかDjangoネタです。

djangoには、「JSONにしてそのまま返す」とか「XMLにしてそのまま返す」とかができる「シリアライズ」機能があるのですよね。
これは便利だ!と思い、さっそくJSONを返すような処理を書いてみました。

しかし・・・

'str' object has no attribute '_meta'

なんで?と思い、色々調べてみると・・・驚くべきことが!
なんと、djangoのオブジェクト(というか、models系のだけ?)じゃないとシリアライズできないみたいです。

ってか、シリアライズについて書かれたページをよく読むと、最初に書いてありますね。

Django の整列化フレームワークを使うと、 Django オブジェクトを他の形式に「翻訳」できます。

・・・日本語を読み飛ばして悩み、英語のフォーラムを見て問題原因を見つける僕って・・・なんて効率の悪い・・・orz

ちなみに、エラーになるコードはこんな感じでした。

from django.http import HttpResponse
from django.core import serializers

def hoge(req):
  item = {"hoge1" : "hogehoge", "hoge2" : "hogehogehoge"}
  res = HttpResponse(mimetype="text/plain", 
                     status=200, 
                     content_type="text/plain; charset=UTF-8")
  JsonSerializer = serializers.get_serializer("json")
  seri = JsonSerializer()
  seri.serialize(item, stream=res)
  return res

そして、直したコードは、

from django.http import HttpResponse
from opensocial import simplejson

def hoge(req):
  item = {"hoge1" : "hogehoge", "hoge2" : "hogehogehoge"}
  res = HttpResponse(mimetype="text/plain", 
                     status=200, 
                     content_type="text/plain; charset=UTF-8")
  simplejson.dump(item, res)
  return res

・・・こっちのほうがスッキリしてますなぁ・・・orz