2015-12-22 42 views
0

我有我的模型Django的:從視圖的數據傳遞JSON的JavaScript

class Calendar(models.Model): 
name = models.CharField(_('name'), max_length=50) 



class Event(models.Model): 
.... 
calendar = models.ForeignKey(Calendar, verbose_name=_('categorie')) 

和我的觀點:

event_list = [] 
events = Event.objects.all() 

for event in events: 
    event_list.append({ 
      'categorie': event.calendar 
      }) 

return http.HttpResponse(json.dumps(event_list), 
          content_type='application/json') 

我嘗試在JavaScript文件返回event.categorie但它不工作 警報(event.categorie)顯示未定義....

如果我打印的event_list,我有

{'categorie': <Calendar: thermique>} 

問題來自models.ForeignKey?

+0

什麼是你試圖獲得一個列表,它只是日曆名稱? – Sayse

+0

它只是日曆名稱 – Patrice

回答

0

您無法將日曆實例轉儲到json。你應該得到錯誤TypeError <Calendar: thermique> is not JSON serializable

您需要將Calendar實例轉換爲簡單類型的字典。例如添加方法as_dict到日曆:

class Calendar(models.Model): 
    name = models.CharField(_('name'), max_length=50) 

    def as_dict(self): 
     return { 
      'id': self.id, 
      'name': self.name, 
     } 

,並在你的代碼中使用它:

for event in events: 
    event_list.append({ 
     'categorie': event.calendar.as_dict(), 
    }) 
+0

我在javascript文件[object Object]中返回alert(event.categorie)..如果你寫'alert(event.categorie.name)'你看到日曆的名字 – Patrice

+0

與警報(event.categorie.name)的名稱感謝 – LinnTroll

+0

yes,我看到的 – Patrice

0

只是它的日曆名稱

因爲所有你需要的是日曆名稱您可以稍微修改一下您的查詢以使用values,但真正的問題可能是需要解析查詢集

events = Event.objects.values('calendar__name') 
return http.JsonResponse(status=200, 
         {'categories': json.dumps(list(events))}) 
+0

http.HttpResponse(json.dumps(event_list)工作正常,如果它不是model.ForeignKey在模型中... – Patrice

+0

@Patrice - 這是因爲它不必弄清楚你想要它返回什麼,'json.dumps'在處理關係模型方面不是很好,因爲它需要進一步的數據庫查詢來獲取值 – Sayse

相關問題