feat Verificar que la combinación de línea y programa es correcta

parent 6862b902
from datetime import date
from django import forms
from django.utils.translation import gettext_lazy as _
from .models import Linea, Programa, Proyecto
class ProyectoForm(forms.ModelForm):
def clean(self):
cleaned_data = super().clean()
programa = cleaned_data.get("programa")
linea = cleaned_data.get("linea")
lineas_del_programa = programa.lineas.all()
if linea and linea.programa_id != programa.id:
self.add_error(
"linea",
_("La línea seleccionada no pertenece al programa seleccionado."),
)
if lineas_del_programa and not linea:
self.add_error("linea", _("Este programa requiere seleccionar una línea."))
return cleaned_data
class Meta:
fields = ["titulo", "descripcion", "programa", "linea", "centro", "estudio"]
model = Proyecto
......@@ -138,7 +138,9 @@ class Licencia(models.Model):
class Linea(models.Model):
nombre = models.CharField(max_length=31)
programa = models.ForeignKey("Programa", on_delete=models.PROTECT)
programa = models.ForeignKey(
"Programa", on_delete=models.PROTECT, related_name="lineas"
)
def __str__(self):
return f"{self.nombre}"
......@@ -208,10 +210,13 @@ class Proyecto(models.Model):
"Resumen sucinto del proyecto. Máximo recomendable: un párrafo de 10 líneas."
),
)
estado = models.CharField(choices = (
("BORRADOR", "Solicitud en preparación"),
("SOLICITADO", "Solicitud presentada"),
), max_length=63)
estado = models.CharField(
choices=(
("BORRADOR", "Solicitud en preparación"),
("SOLICITADO", "Solicitud presentada"),
),
max_length=63,
)
contexto = models.TextField(
_("Contexto del proyecto"),
blank=True,
......@@ -249,7 +254,7 @@ class Proyecto(models.Model):
_("Tipo de proyecto"),
blank=True,
null=True,
help_text=_("Experiencia, Estudio o Desarrollo")
help_text=_("Experiencia, Estudio o Desarrollo"),
)
contexto_aplicacion = models.TextField(
_("Contexto de aplicación/Público objetivo"),
......@@ -375,7 +380,7 @@ class Proyecto(models.Model):
_("Actividades de dinamización previstas"),
blank=True,
null=True,
help_text=_("Sólo obligatorias para MOOCs.")
help_text=_("Sólo obligatorias para MOOCs."),
)
# publicar_memoria = models.BooleanField("¿Publicar la memoria?", default=True)
financiacion = models.TextField(
......
import json
from datetime import date
from django.contrib.auth.mixins import LoginRequiredMixin
from django.forms.models import modelform_factory
from django.http.response import HttpResponse
......@@ -16,6 +17,7 @@ from django.views.generic import (
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django_summernote.widgets import SummernoteWidget
from .forms import ProyectoForm
from .models import (
Convocatoria,
Evento,
......@@ -39,15 +41,16 @@ class ProyectoCreateView(LoginRequiredMixin, CreateView):
# TODO: Comprobar usuario para Proyectos de titulación y POU.
# TODO: Comprobar fecha
# TODO: Check programa/linea
model = Proyecto
template_name = "proyecto/new.html"
fields = ["titulo", "descripcion", "programa", "linea", "centro", "estudio"]
# fields = ["titulo", "descripcion", "programa", "linea", "centro", "estudio"]
form_class = ProyectoForm
def form_valid(self, form):
# Do custom logic on form data that has already been validated here
form.instance.convocatoria = Convocatoria(2019)
# This method is called when valid form data has been POSTed, to do custom logic on form data.
# It should return an HttpResponse.
form.instance.convocatoria = Convocatoria(date.today().year)
proyecto = form.save()
self._guardar_coordinador(proyecto)
self._registrar_creacion(proyecto)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment