1
resposta

Como eu atualizo um campo pela chave entrageira.

class Kit(models.Model):
    STATUS_KIT = [
        ("DISPONIVEL", "Disponivel"),
        ("INDISPONIVEL", "Indisponivel"),
    ]

    id = models.AutoField(primary_key=True)
    nome = models.CharField(max_length=25, verbose_name="Descrição do Kit")
    img  = models.ImageField(upload_to="kit/%Y/%m/%d", null=False, blank=False)
    status_kit = models.CharField(verbose_name="Kits", max_length=12, choices=STATUS_KIT, default="DISPONIVEL")

    def __str__(self):
        return f"{self.nome}"

class Solicitation(models.Model):
    STATUS_SOLICITACAO = [
        ("SOLICITADO", "Solicitado"),
        ("FINALIZADO", "Finalizado"),
    ]

    id = models.AutoField(primary_key=True)
    usuario = models.ForeignKey(User, verbose_name="Usuário", on_delete=models.PROTECT)
    kit = models.ForeignKey(Kit, on_delete=models.PROTECT, verbose_name="Kit")
    data_solicitacao = models.DateField(auto_now=False, null=True, blank=True)
    hora_solicitacao = models.TimeField(auto_now=False, null=True, blank=True)
    matricula = models.IntegerField(verbose_name="Matricula do solicitante")
    setor = models.CharField(max_length=30, verbose_name="Seu setor")   
    status = models.CharField(verbose_name="Solicitação", max_length=12, choices=STATUS_SOLICITACAO, default="SOLICITADO")
    data_entrega = models.DateField(auto_now=False, null=True, blank=True)
    hora_entrega = models.TimeField(auto_now=False, null=True, blank=True)
    img_entrega  = models.ImageField(upload_to="devolucao/%Y/%m/%d", null=True, blank=True)
    observacao = models.TextField(verbose_name="Caso haja alguma alteração no kit")


    def __str__(self):
        return f"{self.kit}"

Quero mudar o status do kit para INDISPONIVEL, e caso esteja indisponile nao pode ser solicitado

1 resposta

Olá Reginaldo, tudo bem com você?

Peço desculpas pela demora em obter um retorno.

Para atualizar o status do kit para INDISPONIVEL quando ele for solicitado, você pode utilizar o método save() da classe Solicitation. O método save() é chamado toda vez que um objeto é salvo no banco de dados, então podemos sobrescrevê-lo para atualizar o status do kit antes de salvar a solicitação.

Exemplo de código:

class Solicitation(models.Model):
    ...

    def save(self, *args, **kwargs):
        if self.status == "SOLICITADO":
            self.kit.status_kit = "INDISPONIVEL"
            self.kit.save()
        super().save(*args, **kwargs)

Dessa forma, sempre que uma solicitação for salva com o status SOLICITADO, o status do kit correspondente será atualizado para INDISPONIVEL Assim, se o kit já estiver indisponível, ele não poderá ser solicitado novamente. Todavia, vale ressaltar que como é um assunto externo ao curso e que não tenho acesso ao cenário completo do projeto, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.

Espero ter ajudado. Continue mergulhando em conhecimento!

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!