Django中的完整日历显示事件

时间:2017-09-15 03:22:53

标签: django fullcalendar

我是Django& amp;的新手。 FullCalendar所以非常感谢任何可以提供的帮助。我的最终目标是使用FullCalendar在Django中显示O365日历中的事件。暂时不考虑现在的O365集成,我只是想让FullCalendar显示模型中的当前事件。我试图模仿此处FullCalendar in DjangoFullcalendar Does not display data发布的解决方案,但不幸的是事件未显示。

这是我的代码:

我的应用中的models.py名为“预订”

from django.db import models

class Events(models.Model):
    event_id = models.AutoField(primary_key=True)
    exchange_id = models.CharField(max_length=255,null=True,blank=True)
    event_start = models.DateTimeField(null=True,blank=True)
    event_end = models.DateTimeField(null=True,blank=True)
    event_subject = models.CharField(max_length=255,null=True,blank=True)
    event_location = models.CharField(max_length=255,null=True,blank=True)
    event_category = models.CharField(max_length=255,null=True,blank=True)
    event_attendees = models.CharField(max_length=255,null=True,blank=True)

    def __str__(self):
        return self.event_subject

views.py。我已经发布了与发布的其他解决方案中的比特,这些比特与类别类型的选择有关。我还在bookings.views.py中使用以下脚本进行了测试,没有成功。

from bookings.models import Events

@method_decorator(login_required, name='dispatch')
class CalendarPage(TemplateView):
    template_name = 'calendar.html'

def event(request):
    all_events = Events.objects.all()
# get_event_types = Events.objects.only('event_category')

# if filters applied then get parameter and filter based on condition else return object
    if request.GET:
        event_arr = []
        # if request.GET.get('event_category') == "all":
        #     all_events = Events.objects.all()
        # else:
        #     all_events = Events.objects.filter(event_category__icontains=request.GET.get('event_category'))

        for i in all_events:
            event_sub_arr = {}
            event_sub_arr['title'] = i.event_subject
            start_date = date(i.event_start.date(), "%Y-%m-%d")
            end_date = date(i.event_end.date(), "%Y-%m-%d")
            event_sub_arr['start'] = start_date
            event_sub_arr['end'] = end_date
            event_arr.append(event_sub_arr)
        return HttpResponse(json.dumps(event_arr))

    context = {
        "events":all_events,
        # "get_event_types":get_event_types,

    }
    return render(request,'calendar',context)

和我的模板calendar.html:

<script>
    $(document).ready(function() {
        $('#calendar').fullCalendar({
          header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
          },
          defaultView: 'month',
          editable: true,
          eventLimit: true,
          events: [
                {% for i in events %}
                {
                    title: "{{ i.event_name}}",
                    start: '{{ i.start_date|date:"Y-m-d" }}',
                    end: '{{ i.end_date|date:"Y-m-d" }}',
                },
                {% endfor %}

            ]
        });
    });
</script>

我使用mysql作为后端数据库。我为测试目的创建了一条记录。这是我期望在日历中看到的记录:

# event_id, exchange_id, event_start, event_end, event_subject, event_location, event_category
1, , 2017-09-13 08:00:00.000000, 2017-09-13 09:00:00.000000, test, , all

日历本身正在按预期显示,只是没有事件。如果我将测试数据硬编码到模板“calendar.html”脚本中,则事件会显示在日历中。

有没有人有过使用FullCalendar和/或Django的经验,可以帮我识别出错的地方?

2 个答案:

答案 0 :(得分:1)

我认为这对你有用。

{{1}}

答案 1 :(得分:0)

我最终使用它来实现它:

views.py:

@method_decorator(login_required, name='dispatch')
class CalendarPage(TemplateView):
    template_name = 'calendar.html'
    form_class = EventForm

    def get_context_data(self, **kwargs):
        context = super(CalendarPage, self).get_context_data(**kwargs)
        context['eventlist'] = Event.objects.all()
        return context

并在模板中:

events: [
    {% for i in eventlist %}
    {
        title: "{{ i.event_title }}",
        start: '{{ i.event_start }}',
        end: '{{ i.event_end }}',
        location: "{{ i.event_location }}",
    },
    {% endfor %}
],