Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中使用fullCalendar_Python_Django_Django Views_Fullcalendar - Fatal编程技术网

Python 在Django中使用fullCalendar

Python 在Django中使用fullCalendar,python,django,django-views,fullcalendar,Python,Django,Django Views,Fullcalendar,这在某种程度上是对此处发布的问题()的后续,但自从提出这个问题后,我决定采取不同的方法。你可以看出我是新手,所以请放轻松 我希望在Django应用程序中有一个每周日历,显示数据库中的班次。以下是移位模型 class Shift(models.Model): owner = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='shifts', blank=True, null=True) # A shift m

这在某种程度上是对此处发布的问题()的后续,但自从提出这个问题后,我决定采取不同的方法。你可以看出我是新手,所以请放轻松

我希望在Django应用程序中有一个每周日历,显示数据库中的班次。以下是移位模型

class Shift(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='shifts',
        blank=True, null=True) # A shift may not have an owner.

    # Choices for fields. Add more choices as necessary.
    DAYS = (
        ('M', 'Monday'),
        ('TU', 'Tuesday'),
        ('W', 'Wednesday'),
        ('TH', 'Thursday'),
        ('F', 'Friday'),
        ('SA', 'Saturday'),
        ('SU', 'Sunday'),
    )

    day_of_the_week = models.CharField(max_length=2, choices=DAYS, blank=True, null=True)
    start_date = models.DateField(blank=True, null=True)
    end_date = models.DateField(blank=True, null=True)
    start_time = models.TimeField(default='12:00:00')
    end_time = models.TimeField(default='14:00:00')
    hours = models.DurationField(editable=False)
    activated = models.BooleanField(verbose_name='Activate', default=False)
    sale_status = models.BooleanField(verbose_name='Activate sale', default=False)

    ...

    def save(self, *args, **kwargs): # Overwrite save() to calculate and save the duration of a shift.
        temp_date = datetime(1,1,1,0,0,0)
        self.hours = datetime.combine(temp_date, self.end_time) - datetime.combine(temp_date, self.start_time)
        super(Shift, self).save(*args, **kwargs)
管理员创建班次并为班次分配所有者。一旦分配了所有者,所有者就可以出售轮班,这将把
sale\u status=False
更改为
sale\u status=True
。然后其他用户可以购买班次,将班次的
所有者
更改为买方,班次的
销售状态
更改为
。理想情况下,通过单击班次,可以在日历中执行这些操作(销售和购买班次)。这意味着日历必须显示其
已激活=True
的所有班次

我已经深入研究了一段时间,决定使用。接下来,我知道我必须为AJAX视图修改我的
视图.py
,并为日历创建一个模板,但我不知道该怎么做。我的模板当前如下所示:

<head>
<link rel='stylesheet' href='fullcalendar/fullcalendar.css' />
<script src='lib/jquery.min.js'></script>
<script src='lib/moment.min.js'></script>
<script src='fullcalendar/fullcalendar.js'></script>
</head>

<div id="calendar"></div>
<script type='text/javascript'>
$(document).ready(function() {

    // page is now ready, initialize the calendar...

    $('#calendar').fullCalendar({
        // put your options and callbacks here
        events: "shifts/eventsFeed",
        weekends: false,
        editable: false,
    })

});
</script>
我还将字段
title
添加到了我的
Shift
。它只是
self.owner
的字符串表示形式。 我的模板名为
calendar\u init.html
,如下所示:

<script type="text/javascript">
    $(document).ready(function() { // Page is ready.
        // Initialize the calendar.
        $('#calendar').fullCalendar({{ calendar_config_options }});
    });
</script>
<!DOCTYPE html>
<head>

    <title>Shifts</title>

    ...

    <script type="text/javascript">
    $(document).ready(function() { // Page is ready.
        // Initialize the calendar.
        $('#calendar').fullCalendar({'firstDay': 1, 'header': {'right': 'month,agendaWeek,agendaDay', 'center': 'title', 'left': 'prev,next today'}, 'defaultView': 'agendaWeek', 'editable': True, 'events': '[{"id": 61, "title": "Unclaimed", "start": "2015-07-21T14:00:00", "end": "2015-07-21T16:00:00"}, {"id": 62, "title": "slee17", "start": "2015-07-21T12:00:00", "end": "2015-07-21T14:00:00"}]'});
    });
</script>

</head>

<body>
<div id="calendar"></div>

$(document).ready(函数(){//页面已准备就绪。
//初始化日历。
$('#calendar').fullCalendar({{calendar\u config\u options}});
});
现在,当呈现模板时,我得到以下结果:

<script type="text/javascript">
    $(document).ready(function() { // Page is ready.
        // Initialize the calendar.
        $('#calendar').fullCalendar({{ calendar_config_options }});
    });
</script>
<!DOCTYPE html>
<head>

    <title>Shifts</title>

    ...

    <script type="text/javascript">
    $(document).ready(function() { // Page is ready.
        // Initialize the calendar.
        $('#calendar').fullCalendar({'firstDay': 1, 'header': {'right': 'month,agendaWeek,agendaDay', 'center': 'title', 'left': 'prev,next today'}, 'defaultView': 'agendaWeek', 'editable': True, 'events': '[{"id": 61, "title": "Unclaimed", "start": "2015-07-21T14:00:00", "end": "2015-07-21T16:00:00"}, {"id": 62, "title": "slee17", "start": "2015-07-21T12:00:00", "end": "2015-07-21T14:00:00"}]'});
    });
</script>

</head>

<body>
<div id="calendar"></div>

转移
...
$(document).ready(函数(){//页面已准备就绪。
//初始化日历。
$(“#calendar”).fullCalendar({'firstDay':1,'标题':{'right':'月,agendaWeek,agendaDay','中间':'title','左':'prev,next today','defaultView':'agendaWeek','可编辑':True,'事件':'[{'id:61,“title:“Unclaims”,“start:”“2015-07-21T14:00:00”,“end:“2015-07-21T16:00”},{'id:62,“title:“17”,“start:”“2015-07-21T12:00:00”,“结束”:“2015-07-21T14:00:00”}];
});

但是,日历仍然没有加载移位。我尝试了使用
json.loads(json.dumps(shifts))
而不是
json.dumps(shifts)
,还尝试了使用中的帮助函数。两者都没有加载带有移位的日历。我在这里做错了什么?(日历仍在加载中,其配置与我的配置相同,但日历为空。)

还有两个小问题: 1)当我说
'edtable':True
而不是
'editable':'True'
时,页面变为空白,没有错误。为什么会这样?我也尝试过做
'weekends'='False'
,它仍然显示带有周末的日历,所以对于布尔值,日历显然没有正确配置。不过,我不确定为什么,since其他配置设置(如
标题
默认视图
,以及
第一天
)似乎都工作正常。
2) 我用过OrderedDict()因为我怀疑在尝试将
事件加载到日历时顺序很重要,但我不确定这是否正确。我可以只使用常规的Python字典吗?

以下是您需要做的基本概述。创建一个按照完整日历的预期返回JSON数据的视图。这非常简单。您可以使用Django Rest框架手工创建一个自定义API,或者使用Django Rest框架。除非您创建的是一个完整的API,否则我会使用JsonResponse

至于JsonResponse的格式,您需要同时指定
start
title
。您可以在完整日历中找到其他可能的字段

例如:

from django.http import JsonResponse

def example(request):
    data = [
        {
            'title': 'event1',
            'start': '2010-01-01'
        },
        {
            'title': 'event2',
            'start': '2010-01-05',
            'end': '2010-01-07'
        }
    ]
    return JsonResponse(data, safe=False)

非常感谢!我已经采纳了你的建议(稍微调整了细节以使用Django的模板,但仍然是相同的想法)现在我遇到了新的问题。我也编辑了这个问题,但你知道为什么我的日历不会从数据库加载事件吗?看起来你没有按照我的答案设计。你编辑的方法不是使用AJAX,它只是在第一次加载视图时提供所有数据。请不要尝试创建措辞要传递到完整日历的初始值设定项中的一组值。避免这样做应该会引导您自己回答新问题。我可能在这里错了,但我看不出您的方法和我的方法有什么不同(至少从代码片段看),特别是因为我不明白你的代码是如何使用AJAX的。另外,我希望日历首先显示数据库中的所有班次,所以我不想在视图第一次加载时提供所有数据吗?我知道我想在用户
购买
出售
班次时使用AJAX,但这是为了以后,所有IFT显示在日历中。如果我错了,请随时更正。