Django:将数据JSON从视图传递到javascript

时间:2015-12-22 07:39:14

标签: javascript json django

我有我的模特

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,但它无效 alert(event.categorie)显示未定义....

如果我打印event_list,我有

{'categorie': <Calendar: thermique>}

问题来自models.ForeignKey?

2 个答案:

答案 0 :(得分:0)

您无法将日历实例转储到json。您应该收到错误TypeError <Calendar: thermique> is not JSON serializable

您需要将Calendar实例转换为简单类型的dict。例如,将方法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(),
    })

答案 1 :(得分:0)

  

只是日历名称

由于您只需要日历名称,您可以稍微修改一下查询以使用values,但可能需要解析查询集来调用真正的问题

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