2012-05-08 80 views
5

有幾個問題,問對已經同樣的事情。但他們從2010年開始,對我沒有太大的幫助。所以我認爲它可能是自2010年以來對這一方面的一些更新?Django的序列化的外鍵對象

在谷歌,我找到了這個link,它解釋了使用natural keys。不過,我的問題是從django.contrib.auth.models.User獲取異物,因此無濟於事。

我的問題如下。我想序列化QuerySet,所以我也得到了外鍵對象,因爲我想將它作爲JSON傳遞給客戶端。從django.core的序列化程序不會這樣做。所以在我的情況下,只是簡單的問題,我已經添加了另一個字段的模型,以包含我需要的異物的價值。但是它會引入冗餘數據。

我的示例模型它包含username我想如果可能的話刪除,而不是通過外鍵得到它。解決此

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

回答

6

一個可能的方法是基於一個查詢集的回報來構建自己的字典對象。你會這樣做:

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