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对象,任何想法?
答案 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不知道日期时间,所以这个编码器添加了这个功能。