0
I am developing in Django the following application of course management, in the register of a class I have a registration informing the amount of vacancies for doctors and academics, and in the registration I need, that the system accepts only the amount of the vacancies made available. I’m making this rule within the Django admin. follow the code
class Inscricao(models.Model):
Pessoa = models.ForeignKey(Pessoa, on_delete=models.CASCADE)
Turma = models.ForeignKey(Turma, on_delete=models.CASCADE)
Inscricao = models.CharField(db_column='NU_INSCRICAO', max_length=255, blank=True, null=True)
numero_sorteio = models.PositiveIntegerField(db_column='NUMERO_SORTEIO', blank=True, null=True)
Presente = models.BooleanField(db_column='PRESENTE', blank=True, null=True)
dt_sorteio = models.DateTimeField(db_column='DT_SORTEIO', blank=True, null=True)
Certificado = models.ForeignKey(Certificado, blank= True, null=True, on_delete=models.CASCADE)
dt_emissao_certificado = models.DateTimeField(db_column='DT_EMISSAO_CERTIFICADO', blank=True, null=True)
dt_cadastro = models.DateTimeField(db_column='DT_CADASTRO', blank=True, null=True, auto_now_add = True)
dt_alteracao = models.DateTimeField(db_column='DT_ALTERACAO', blank=True, null=True, auto_now = True)
class Meta:
verbose_name='Inscrição'
verbose_name_plural='Inscrições'
def clean(self):
qtd_vaga_academico=sum([e.quantidade for e in TurmaRegraVaga.objects.filter(Turma__id_turma=self.Turma.id_turma,Regra_vaga__Regra_vaga='Acadêmicos')])
qtd_vaga_medico=sum([e.quantidade for e in TurmaRegraVaga.objects.filter(Turma__id_turma=self.Turma.id_turma,Regra_vaga__Regra_vaga='Médicos')])
qtd_vaga_medico_academico=sum([e.quantidade for e in TurmaRegraVaga.objects.filter(Turma__id_turma=self.Turma.id_turma,Regra_vaga__Regra_vaga='Médicos e Acadêmicos')])
if self.Pessoa.Tipo_pessoa == 'A' and qtd_vaga_academico <= Inscricao.objects.filter(Turma__id_turma=self.Turma.id_turma,Pessoa__Tipo_pessoa = 'A').count():
raise ValidationError('Não há mais vagas disponíveis.')
if self.Pessoa.Tipo_pessoa == 'M' and qtd_vaga_medico <= Inscricao.objects.filter(Turma__id_turma=self.Turma.id_turma,Pessoa__Tipo_pessoa = 'M').count():
raise ValidationError('Não há mais vagas disponíveis.')
But with this code when I change informing that the student is present he also makes the validation saying that there are no more vacancies, because it validates both in save and update, as I do to leave this rule only to save it and not to update. I appreciate the help.