Как передать объект JSON в FullCalendar из Django (путем сериализации модели)? - PullRequest
3 голосов
/ 12 октября 2010

FullCalendar поддерживает прием JSON-объекта через AJAX для его событий, это можно сделать при инициализации или позже:

$('#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 Ответ

8 голосов
/ 12 октября 2010

Не используйте встроенные сериализаторы 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, поэтому этот кодировщик добавляет эту функциональность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...