如何从Django将JSON对象传递给FullCalendar(通过序列化模型)?

时间:2010-10-12 13:35:49

标签: django json events serialization fullcalendar

FullCalendar支持通过AJAX为它的事件接收JSON对象,这可以在初始化时或稍后完成,如下所示:

$('#calendar').fullCalendar('addEventSource', "/{{ user }}/events/" );

我的Django视图中的序列化本身如下所示:

...
events = Event.objects.filter(user=request.user, start__gte=start, end__lte=end)
message = serializers.serialize("json", events, ensure_ascii=False)
...

返回的JSON对象如下所示:

[{"pk": 2, "model": "main.event", "fields": {"url": null, "start": "2010-10-09 08:30:00", "end": "2010-10-09 10:30:00", "user": 1, "title": "sdf"}}, {"pk": 3, "model": "main.event", "fields": {"url": null, "start": "2010-10-03 08:30:00", "end": "2010-10-03 12:00:00", "user": 1, "title": "sdf2"}}]

Fullcalendar事件包含以下变量:id,title,start,end,allDay和url。

我认为FullCalendar现在正在接收我的JSON对象(不知道如何检查)但是它可能是不可接受的,我如何使它可以被FullCalendar加入?它可能看起来像这样:

[{id: 1, title: 'Title1', start: new Date(2010, 10, 3, 8, 30), end: new Date(2010, 10, 3, 12, 0), allDay: false, url: false}]

或:

[{"id": 1, "title": 'Title1', "start": new Date(2010, 10, 3, 8, 30), "end": new Date(2010, 10, 3, 12, 0), "allDay": false, "url": false}]

甚至是其他东西,不确定。

所以基本上情况是我之前没有使用JSON对象,我不确定如何最好地将模型序列化为可接受的JSON对象,任何想法?

1 个答案:

答案 0 :(得分:8)

不要使用Django的内置序列化器。我几乎从不使用它们 - 它们非常不灵活。

幸运的是,自己序列化内容非常简单。

from django.utils import simplejson
from django.core.serializers.json import DjangoJSONEncoder

events = Event.objects.filter(
              user=request.user, start__gte=start, end__lte=end
         ).values('id', 'title', 'start', 'end')
data = simplejson.dumps(list(events), cls=DjangoJSONEncoder)

这里我只是通过values从查询集中获取字典,并将其传递给simplejson以对选择的字段列表进行编码。我需要使用DjangoJSONEncoder,因为默认情况下json不知道日期时间,所以这个编码器添加了这个功能。