I have 3 models: Student, Characterization and semester
I need to obtain a queryset with the semesters that NO have been registered in the characterizations of each student.
I mean, each student can have a number of characterizations and the characterizations have a semester (foreigner) and a student (foreigner) but a student can not have more than two characterizations with the same semester.
these are my models
Student
class Estudiante(models.Model):
nombre = models.CharField(verbose_name="Nombres", max_length=200)
apellido = models.CharField(verbose_name="Apellidos", max_length=200)
tipo_documento = models.IntegerField(choices=TIPOS_DOCUMENTOS, default=1)
documento = models.CharField(
verbose_name="Número de documento", max_length=200, unique=True)
celular = models.CharField(
verbose_name="Celular", max_length=200, null=True, blank=True)
telefono = models.CharField(
verbose_name="Telefono", max_length=200, null=True, blank=True)
genero = models.ForeignKey(
Genero, verbose_name="Género", on_delete=models.CASCADE)
fecha_nacimiento = models.DateField(verbose_name="Fecha de nacimiento")
email = models.EmailField(
verbose_name="Correo electronico", null=True, blank=True, unique=True)
direccion = models.CharField(
verbose_name="Dirección", max_length=200, null=True, blank=True)
foto = models.ImageField(upload_to=custom_upload_to, null=True, blank=True)
programa = models.ForeignKey(Programa, on_delete=models.CASCADE)
estado = models.IntegerField(choices=ESTADOS, default=0)
semestre_inicio = models.ForeignKey(Semestre, on_delete=models.CASCADE)
def __str__(self):
return ('{} {}'.format(self.nombre, self.apellido))
Semester
class Semestre(models.Model):
nombre = models.CharField(verbose_name="Nombre", max_length=200, unique=True)
def __str__(self):
return self.nombre
Characterization
class Caracterizacion(models.Model):
SI_NO = (
(1,'Sí'),
(2,'No'),
)
estudiante = models.ForeignKey(Estudiante, verbose_name="Estudiante", on_delete=models.CASCADE)
descripcion = models.TextField(verbose_name="Descripción", null=True, blank=True)
semestre = models.ForeignKey(Semestre, verbose_name="Semestre", on_delete=models.CASCADE)
tipo = models.ForeignKey(Tipo_caracterizacion, verbose_name="Tipo", on_delete=models.CASCADE, default=1)
nivelado = models.IntegerField(choices = SI_NO, default=1)
usuario = models.ForeignKey(User, verbose_name="Usuario", on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True, verbose_name="Fecha de creación")
def __str__(self):
return ('{} - {}'.format(self.estudiante, self.semestre))