2012-05-08 11 views
5

すでに同じことを尋ねる質問がいくつかあります。しかし、彼らは2010年から、それは私をそんなに助けてくれませんでした。だから私はおそらく2010年以来この正面のいくつかの更新されていると思う?ジャンゴ外部キーのオブジェクトをシリアル化

私はこれを見つけましたlink、使用方法はnatural keysです。しかし、私の問題は、異物をdjango.contrib.auth.models.Userから得ることであり、それで助けにはならない。

私の問題は次のとおりです。私はクエリセットをシリアル化したいので、クライアントにJSONとして渡したいので、私は外部キーオブジェクトも取得します。シリアライザdjango.coreからそれはしません。だから、私の場合は単に問題に私は外国のオブジェクトから必要な値を格納するために、モデルに別のフィールドを追加しました。しかし、それは冗長なデータを導入します。

私のモデル例には、可能であればusernameが含まれています。代わりに外部キーで取得します。

user = models.ForeignKey(User) 
    username = models.CharField(max_length=100, null=False) 

答えて

6

これを回避する方法の1つは、クエリセットの返品に基づいて独自の辞書オブジェクトを作成することです。

queryset = Model.objects.all() 
list = [] #create list 
for row in queryset: #populate list 
    list.append({'title':row.title, 'body': row.body, 'name': row.user.username}) 
recipe_list_json = json.dumps(list) #dump list as JSON 
return HttpResponse(recipe_list_json, 'application/javascript') 

これを動作させるには、jsonをインポートする必要があります。

import json 
+0

うーん、私はそれについて考えなかった。先端に感謝 – starcorn

+1

問題ありません。 Djangoのシリアライザは間違いなく少し限られているようです。これを試してみることもできます:http://code.google.com/p/wadofstuff/wiki/DjangoFullSerializers – bento

関連する問題