【发布时间】:2020-11-03 09:46:26
【问题描述】:
我正在我的 Django 项目中制作一个完整的日历,我想使用 django 过滤器来过滤日历。我已经成功地创建了日历和过滤器,但是我不能让它一起工作。
有没有人有在 fullcalendar 中包含 django 过滤器(或其他过滤方法)的经验,或者有解释 fullcalendar 中过滤的文档链接?
这是我的看法:
def kalender2(request):
all_events = Timing.objects.all()
myFilter = CalenderFilter(request.GET, queryset=all_events)
all_events = myFilter.qs
if request.GET:
event_arr = []
for i in all_events:
event_sub_arr = {}
event_sub_arr['title'] = i.event,i.name
start_date = datetime.strptime(str(i.start_time.date()), "%Y-%m-%d").strftime("%Y-%m-%d")
end_date = datetime.strptime(str(i.end_time.date()), "%Y-%m-%d").strftime("%Y-%m-%d")
event_sub_arr['start'] = start_date
event_sub_arr['status'] = i.event.status
event_sub_arr['end'] = end_date
event_arr.append(event_sub_arr)
return HttpResponse(json.dumps(event_arr))
context = {
"events":all_events,
"myFilter":myFilter,
}
return render(request,'kalender/kalender.html', context)
这是日历的脚本和模板:
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'dayGridMonth',
initialDate: '2020-10-07',
locale: 'nl',
slotMinTime: "08:00:00",
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
},
buttonText: {
timeGridDay: 'Dag',
today:'Vandaag',
timeGridWeek: 'Week',
listWeek: 'Lijst',
dayGridMonth: 'Maand'
},
eventDisplay: 'block',
events: [
{% for i in events %}
{
title: "{{ i.event}} {{i.name}}",
start: '{{ i.start_time|date:"Y-m-d H:i" }}',
end: '{{ i.end_time|date:"Y-m-d H:i" }}',
status:'{{i.event.status}}',
className: ["event","{{i.event.status}}"],
allDay: false,
},
{% endfor %}
],
eventTimeFormat: { // like '14:30:00'
hour: '2-digit',
minute: '2-digit',
meridiem: false
}
});
calendar.render();
});
</script>
{% extends "base.html" %}
{% block content %}
{% load crispy_forms_tags %}
<div class=flexbox-container-gantt>
<div class = "flexbox-item-a-gantt">
<form class ="filterform"method="GET">
{{myFilter.form|crispy}}
<button class="zoeken" type="submit"> Zoeken</button>
</form>
</div>
</div>
<div class=flexbox-container-gantt>
<div class = "flexbox-item-a-gantt">
<h1 class="title-box"> <i class="fas fa-calendar-plus"></i> Kalender </h1>
<hr class="box-line">
<div class = "width_thing">
<div id='calendar'></div>
</div>
</div>
</div>
</div>
{% endblock content %}
更新:我将 i.event 更改为字符串,现在它过滤数据。它在页面上显示原始数据,而不是在日历上,大概是因为 url:http://localhost:8000/Kalender/?event=43&name=1&event_name=。但我不确定这是否会导致它。
【问题讨论】:
-
嗨,尼克,我假设错误消息是指您视图中的行,您在其中执行
event_sub_arr['title'] = i.event。显然,i.event不是 python 可以轻松序列化的字符串或原始值。如果这没有帮助,请检查并再次写入!一般来说,您的代码看起来不错。 -
嗨伊夫,感谢您的回复。我已将 i.event 更改为字符串,现在过滤器正在工作。但是,当我使用过滤器时,我最终会进入一个显示原始数据的页面。我认为这是因为 url 正在发生变化。我将编辑我的原始帖子以说明我的意思。
-
嗨,尼克,当您从 django 插入带有模板标签的数据时,我不确定您在
<script></script中的解决方案效果如何。 Fullcalendar 允许您通过 ajax 从您的视图中检索数据并自行负责解析 (fullcalendar.io/docs/events-json-feed)。我可以想象这会更好。 -
嗨 Yves,再次感谢您抽出宝贵时间回复我的问题。我现在找到了以下帖子:stackoverflow.com/questions/39902405/fullcalendar-in-django/…。该解决方案使用 Ajax 调用来更新日历。我仍在努力理解如何在我的项目中实现这一点,但链接中答案的最后一部分应该使我能够选择一个值并过滤该特定值的日历。
标签: json django fullcalendar