質問

私はAJAXを使って実験して使用している単純なビューを持っています。

def get_shifts_for_day(request,year,month,day):

    data= dict()
    data['d'] =year
    data['e'] = month
    data['x'] = User.objects.all()[2]

    return HttpResponse(simplejson.dumps(data), mimetype='application/javascript')

これは、次を返します:

TypeError at /sched/shifts/2009/11/9/

<User: someguy> is not JSON serializable

私はデータを取り出した場合は、[「X」]行、私はそれが動作する任意のモデルを参照すると、これを返していないよようにます:

{"e": "11", "d": "2009"}

なぜ、デフォルトのDjangoのモデルの私の1を解析のsimplejsonできないのですか?私が使用するすべてのモデルと同じ動作を取得ます。

役に立ちましたか?

解決

あなたの質問はもちろんである「なぜ」あなたの答え - あなたはそれをその種類、それは知らないデータを渡す際に

あなたはただ.dumpsは何をすべきかを知っているように、あなたのdefault=encode_myway呼び出しで、simplejson引数を追加する必要がありますはモデルのインスタンスのいずれかをどうするか、の貧しいsimplejsonに語っていない。

そして、もちろん、あなたは例えば、JSON-符号化可能なデータを提供するために、encode_mywayを記述する必要があります。

def encode_myway(obj):
  if isinstance(obj, User):
    return [obj.username,
            obj.firstname,
            obj.lastname,
            obj.email]
    # and/or whatever else
  elif isinstance(obj, OtherModel):
    return [] # whatever
  elif ...
  else:
    raise TypeError(repr(obj) + " is not JSON serializable")

基本的には、JSONは(辞書やリストにグループ化文字列、int型や山車、)については非常に基本データタイプを知っている - それは、このような基本データ型から/に他のすべてと一致するように、アプリケーションプログラマとしてのあなたの責任だ、とsimplejson中だという通常default=またはdumpdumpsに渡された関数を使用して行われます。

また、あなたはのドキュメントを参照してください、ジャンゴの一部だjson・シリアライザを使用することができます。

scroll top