【问题标题】:How do I pass a JSON object to FullCalendar from Django (by serializing a model)?如何将 JSON 对象从 Django 传递给 FullCalendar(通过序列化模型)?
【发布时间】:2011-04-24 08:04:50
【问题描述】:

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 对象,有什么想法吗?

【问题讨论】:

    标签: django json events serialization fullcalendar


    【解决方案1】:

    不要为此使用 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不知道日期时间,所以这个编码器添加了这个功能。

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2022-01-17
      • 2014-03-12
      • 1970-01-01
      相关资源
      最近更新 更多