Showing
3 changed files
with
46 additions
and
10 deletions
@@ -15,6 +15,7 @@ class EventoForms(forms.ModelForm): | @@ -15,6 +15,7 @@ class EventoForms(forms.ModelForm): | ||
15 | 'categoria', | 15 | 'categoria', |
16 | 'fecha_inicio', | 16 | 'fecha_inicio', |
17 | 'hora_inicio', | 17 | 'hora_inicio', |
18 | + 'fecha_final', | ||
18 | 'hora_fin', | 19 | 'hora_fin', |
19 | 'fechas', | 20 | 'fechas', |
20 | 'descripcion', | 21 | 'descripcion', |
@@ -38,5 +39,34 @@ class EventoForms(forms.ModelForm): | @@ -38,5 +39,34 @@ class EventoForms(forms.ModelForm): | ||
38 | raise ValidationError( | 39 | raise ValidationError( |
39 | _('La dirección no es un enlace válido de Google Maps.') | 40 | _('La dirección no es un enlace válido de Google Maps.') |
40 | ) | 41 | ) |
42 | + return direccion | ||
41 | 43 | ||
42 | - return direccion | ||
44 | + def clean_fecha_final(self): | ||
45 | + fecha_inicio = self.cleaned_data.get('fecha_inicio') | ||
46 | + fecha_final = self.cleaned_data.get('fecha_final') | ||
47 | + | ||
48 | + if fecha_inicio and fecha_final: | ||
49 | + if fecha_final < fecha_inicio: | ||
50 | + raise ValidationError( | ||
51 | + _('La fecha final no puede ser anterior a la fecha de inicio.' | ||
52 | + ) | ||
53 | + ) | ||
54 | + | ||
55 | + return fecha_final | ||
56 | + | ||
57 | + def clean_hora_fin(self): | ||
58 | + clean = super().clean() | ||
59 | + | ||
60 | + fecha_inicio = clean.get('fecha_inicio') | ||
61 | + hora_inicio = clean.get('hora_inicio') | ||
62 | + fecha_final = clean.get('fecha_final') | ||
63 | + hora_fin = clean.get('hora_fin') | ||
64 | + | ||
65 | + if fecha_inicio and fecha_final and fecha_final == fecha_inicio: | ||
66 | + if hora_inicio and hora_fin and hora_fin <= hora_inicio: | ||
67 | + raise ValidationError( | ||
68 | + _('La hora de finalización debe ser posterior a la hora de inicio.' | ||
69 | + ) | ||
70 | + ) | ||
71 | + | ||
72 | + return hora_fin |
1 | -# Generated by Django 4.2.9 on 2024-10-01 15:20 | 1 | +# Generated by Django 4.2.9 on 2024-10-01 21:42 |
2 | 2 | ||
3 | import django.core.validators | 3 | import django.core.validators |
4 | from django.db import migrations, models | 4 | from django.db import migrations, models |
@@ -29,16 +29,17 @@ class Migration(migrations.Migration): | @@ -29,16 +29,17 @@ class Migration(migrations.Migration): | ||
29 | fields=[ | 29 | fields=[ |
30 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | 30 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
31 | ('fecha_inicio', models.DateField(verbose_name='Fecha de inicio del evento')), | 31 | ('fecha_inicio', models.DateField(verbose_name='Fecha de inicio del evento')), |
32 | - ('hora_inicio', models.TimeField(blank=True, verbose_name='Hora de apertura')), | ||
33 | - ('hora_fin', models.TimeField(blank=True, verbose_name='Hora de cierre')), | 32 | + ('hora_inicio', models.TimeField(verbose_name='Hora de apertura')), |
33 | + ('fecha_final', models.DateField(verbose_name='Fecha de cierre del evento')), | ||
34 | + ('hora_fin', models.TimeField(verbose_name='Hora de cierre')), | ||
34 | ('titulo', models.CharField(max_length=350)), | 35 | ('titulo', models.CharField(max_length=350)), |
35 | ('categoria', models.SlugField(max_length=150)), | 36 | ('categoria', models.SlugField(max_length=150)), |
36 | - ('direccion', models.URLField(max_length=150, verbose_name='ubicación')), | 37 | + ('direccion', models.URLField(help_text='Ingrese la url obtenida por google maps', max_length=150, verbose_name='Ubicación del evento')), |
37 | ('descripcion', models.TextField(verbose_name='Descripción')), | 38 | ('descripcion', models.TextField(verbose_name='Descripción')), |
38 | ('url', models.URLField(blank=True, max_length=300, verbose_name='Dirección Web')), | 39 | ('url', models.URLField(blank=True, max_length=300, verbose_name='Dirección Web')), |
39 | ('imagen', models.ImageField(blank=True, upload_to='static/eventos', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['jpg', 'png'])], verbose_name='Banner promocional')), | 40 | ('imagen', models.ImageField(blank=True, upload_to='static/eventos', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['jpg', 'png'])], verbose_name='Banner promocional')), |
40 | ('dependencia', models.ManyToManyField(blank=True, related_name='evento_dependencia', to='organismo.dependencia')), | 41 | ('dependencia', models.ManyToManyField(blank=True, related_name='evento_dependencia', to='organismo.dependencia')), |
41 | - ('fechas', models.ManyToManyField(related_name='evento_fechas', to='evento.fechaevento', verbose_name='Días disponibles')), | 42 | + ('fechas', models.ManyToManyField(blank=True, related_name='evento_fechas', to='evento.fechaevento', verbose_name='Días disponibles')), |
42 | ('organismo', models.ManyToManyField(blank=True, related_name='evento_organismo', to='organismo.organismo')), | 43 | ('organismo', models.ManyToManyField(blank=True, related_name='evento_organismo', to='organismo.organismo')), |
43 | ], | 44 | ], |
44 | options={ | 45 | options={ |
@@ -24,17 +24,22 @@ class Evento(models.Model): | @@ -24,17 +24,22 @@ class Evento(models.Model): | ||
24 | blank=True | 24 | blank=True |
25 | ) | 25 | ) |
26 | fecha_inicio = models.DateField(verbose_name='Fecha de inicio del evento') | 26 | fecha_inicio = models.DateField(verbose_name='Fecha de inicio del evento') |
27 | - hora_inicio = models.TimeField(blank=True, verbose_name='Hora de apertura') | ||
28 | - hora_fin = models.TimeField(blank=True, verbose_name='Hora de cierre') | 27 | + hora_inicio = models.TimeField(blank=False, verbose_name='Hora de apertura') |
28 | + fecha_final = models.DateField(verbose_name='Fecha de cierre del evento') | ||
29 | + hora_fin = models.TimeField(blank=False, verbose_name='Hora de cierre') | ||
29 | fechas = models.ManyToManyField( | 30 | fechas = models.ManyToManyField( |
30 | 'FechaEvento', | 31 | 'FechaEvento', |
31 | related_name='evento_fechas', | 32 | related_name='evento_fechas', |
32 | - blank=False, | 33 | + blank=True, |
33 | verbose_name='Días disponibles', | 34 | verbose_name='Días disponibles', |
34 | ) | 35 | ) |
35 | titulo = models.CharField(max_length=350, null=False) | 36 | titulo = models.CharField(max_length=350, null=False) |
36 | categoria = models.SlugField(max_length=150, null=False) | 37 | categoria = models.SlugField(max_length=150, null=False) |
37 | - direccion = models.URLField(max_length=150, verbose_name='ubicación') | 38 | + direccion = models.URLField( |
39 | + max_length=150, | ||
40 | + verbose_name='Ubicación del evento', | ||
41 | + help_text='Ingrese la url obtenida por google maps' | ||
42 | + ) | ||
38 | descripcion = models.TextField(null=False, verbose_name='Descripción') | 43 | descripcion = models.TextField(null=False, verbose_name='Descripción') |
39 | url = models.URLField( | 44 | url = models.URLField( |
40 | max_length=300, | 45 | max_length=300, |
-
Please register or login to post a comment