2010-10-12 70 views
3

FullCalendar支持通過AJAX爲它的事件採取的JSON對象,這樣可以在初始化完成或更高版本是這樣的:如何從Django將JSON對象傳遞給FullCalendar(通過序列化模型)?

$('#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事件需要遵循變量:標識,標題,開始,結束,allDay和網址。

我認爲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對象,任何想法?

回答

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不知道datetime,所以這個編碼器增加了這個功能。

相關問題