我有我的模特
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?
答案 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))})