Saltar al contenido

FullCalendar en Django

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.

¡Haz clic para puntuar esta entrada!
(Votos: 6 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *