models.py 2.28 KB
from django.db import models

from django.core.validators import FileExtensionValidator

from organismo.models import Organismo, Dependencia
from .constant import DIAS_SEMANA

# Create your models here.


class Evento(models.Model):
    class Meta:
        ordering = 'titulo', 'categoria'
        verbose_name = 'Evento'
        verbose_name_plural = 'Eventos'

    organismo = models.ManyToManyField(
        Organismo,
        related_name='evento_organismo',
        blank=True
    )
    dependencia = models.ManyToManyField(
        Dependencia,
        related_name='evento_dependencia',
        blank=True
    )
    fecha_inicio = models.DateField(verbose_name='Fecha de inicio del evento')
    hora_inicio = models.TimeField(blank=False, verbose_name='Hora de apertura')
    fecha_final = models.DateField(verbose_name='Fecha de cierre del evento')
    hora_fin = models.TimeField(blank=False, verbose_name='Hora de cierre')
    fechas = models.ManyToManyField(
        'FechaEvento',
        related_name='evento_fechas',
        blank=True,
        verbose_name='Días disponibles',
        help_text='Por favor, indique los días disponibles para el evento'
    )
    titulo = models.CharField(max_length=350, null=False)
    categoria = models.CharField(max_length=150, null=False)
    direccion = models.URLField(
        max_length=150,
        verbose_name='Ubicación del evento',
        help_text='Ingrese la url obtenida por google maps'
    )
    descripcion = models.TextField(null=False, verbose_name='Descripción')
    url = models.URLField(
        max_length=300,
        blank=True,
        verbose_name='Dirección Web'
    )
    imagen = models.ImageField(
        upload_to='static/eventos',
        validators=[FileExtensionValidator(allowed_extensions=['jpg', 'png'])],
        blank=True,
        verbose_name='Banner promocional'
    )

    def __str__(self):
        return f'{self.titulo} - {self.descripcion}'


class FechaEvento(models.Model):
    class Meta:
        verbose_name = 'Fecha del Eventos'
        verbose_name_plural = 'Fechas del Eventos'
    duracion_evento = models.IntegerField(choices=DIAS_SEMANA, blank=False, verbose_name='Días de la semana')
    dias = models.DateField(editable=False, blank=True, null=True)

    def __str__(self):
        return f'{self.duracion_evento}'