How to put the validation rule only when saving and not validating in the update in Django admin with python?

Asked

Viewed 15 times

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.

1 answer

0

Thinking a little bit here I got a solution, I don’t know if you have a specific command in Django to identify when it is Insert or update, but I put it in if to check if the id has something inside if you don’t have it is Insert if you have update so I could do the validation. If anyone has another kind view share. Follows solution.

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.id_inscricao is None and 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.id_inscricao is None and 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.')

Browser other questions tagged

You are not signed in. Login or sign up in order to post.