Solución:
Dado que su pregunta muestra que no ha intentado nada, supongo que sabe javascript y probó algunas manos con js de calendario completo.
Suponga que tiene un modelo llamado Evento para mostrar diferentes eventos en el calendario.
class Events(models.Model):
even_id = models.AutoField(primary_key=True)
event_name = models.CharField(max_length=255,null=True,blank=True)
start_date = models.DateTimeField(null=True,blank=True)
end_date = models.DateTimeField(null=True,blank=True)
event_type = models.CharField(max_length=10,null=True,blank=True)
def __str__(self):
return self.event_name
En tu views.py
def event(request):
all_events = Events.objects.all()
get_event_types = Events.objects.only('event_type')
# if filters applied then get parameter and filter based on condition else return object
if request.GET:
event_arr = []
if request.GET.get('event_type') == "all":
all_events = Events.objects.all()
else:
all_events = Events.objects.filter(event_type__icontains=request.GET.get('event_type'))
for i in all_events:
event_sub_arr =
event_sub_arr['title'] = i.event_name
start_date = datetime.datetime.strptime(str(i.start_date.date()), "%Y-%m-%d").strftime("%Y-%m-%d")
end_date = datetime.datetime.strptime(str(i.end_date.date()), "%Y-%m-%d").strftime("%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,'admin/poll/event_management.html',context)
Y finalmente, en su plantilla, configure el calendario completo con la inclusión de CSS, archivos JS y código HTML necesarios.
Dinámicamente en algún evento necesita cambiar eventos, por ejemplo, cambiando el menú desplegable necesita filtrar eventos,
$(document).ready(function()
$('.event_types').on('change',function()
var event_type = $.trim($(this).val());
$.ajax(
url: "% url 'manage-event' %",
type: 'GET',
data:"event_type":event_type,
cache: false,
success: function (response)
var event_arr = $.parseJSON(response);
$('#calendar').fullCalendar('removeEvents');
$('#calendar').fullCalendar('addEventSource', event_arr);
$('#calendar').fullCalendar('rerenderEvents' );
,
error: function ()
alert("error");
)
)
)
Puede usar el siguiente código para agregar, eliminar y actualizar eventos en el calendario completo:
modelo:
class Events(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255,null=True,blank=True)
start = models.DateTimeField(null=True,blank=True)
end = models.DateTimeField(null=True,blank=True)
def __str__(self):
return self.name
vista:
def calendar(request):
all_events = Events.objects.all()
context =
"events":all_events,
return render(request,'calendar.html',context)
def add_event(request):
start = request.GET.get("start", None)
end = request.GET.get("end", None)
title = request.GET.get("title", None)
event = Events(name=str(title), start=start, end=end)
event.save()
data =
return JsonResponse(data)
def update(request):
start = request.GET.get("start", None)
end = request.GET.get("end", None)
title = request.GET.get("title", None)
id = request.GET.get("id", None)
event = Events.objects.get(id=id)
event.start = start
event.end = end
event.name = title
event.save()
data =
return JsonResponse(data)
def remove(request):
id = request.GET.get("id", None)
event = Events.objects.get(id=id)
event.delete()
data =
return JsonResponse(data)
URL:
url('^calendar', views.calendar, name='calendar'),
url('^add_event$', views.add_event, name='add_event'),
url('^update$', views.update, name='update'),
url('^remove', views.remove, name='remove'),
html:
title
Ejemplo: Para agregar eventos al calendario completo, debe agregar eventos a su modelo o, si no desea guardarlos, debe crear un evento y enviarlo a calendario completo (en el calendario def). Por ejemplo, para agregar eventos a todos los domingos de 2020:
vista:
def calendar(request):
from datetime import date, timedelta
d = date(2020, 1, 1)
d += timedelta(days=6 - d.weekday()) # First Sunday
all_sunday_in_2020 = []
while d.year != 2021:
all_sunday_in_2020.append('name': 'my-title', 'start': d, 'end': d
+ timedelta(days=1))
d += timedelta(days=7)
return render(request,'calendar.html','events':all_sunday_in_2020)
Al final de la web puedes encontrar las explicaciones de otros creadores, tú asimismo tienes la habilidad mostrar el tuyo si lo crees conveniente.