1
resposta

Como criar um formulário a partir de dois models?

Olá, gostaria de saber se é possível ter dois models diferentes, por exemplo: model Tarefas com os atributos(colunas) "nome(CharField)" e "feito(booleanField)" e outro model Relatório de tarefas 'TarefasRelatorios" com os atributos: "nome" -> Esse nome deve ser o mesmo do model Tarefas, "descrição" sendo do próprio model 'TarefasRelatorios' e o último campo 'feito' também deve puxar do models Tarefas. Não sei se expliquei bem mas resumindo, eu estou precisando fazer um formulário que use campos de models diferentes e modifique os valores desses models.

1 resposta

Olá Marcos, como você está?

Peço desculpas pela demora em obter um retorno.

É possível ter dois modelos diferentes no Django, como você descreveu. Você pode criar dois modelos separados, um para as tarefas e outro para os relatórios de tarefas, como você mencionou. A chave para vinculá-los é usar uma chave estrangeira (ForeignKey) no modelo de relatório de tarefas, que faz referência ao modelo de tarefas.

Exemplo:

class Tarefa(models.Model):
    nome = models.CharField(max_length=100)
    feito = models.BooleanField()

    def __str__(self):
        return self.nome

class TarefaRelatorio(models.Model):
    tarefa = models.ForeignKey(Tarefa, on_delete=models.CASCADE, editable=False)
    descricao = models.TextField()
    feito = models.BooleanField(default=False)

    def save(self, *args, **kwargs):
        self.feito = self.tarefa.feito
        super(TarefaRelatorio, self).save(*args, **kwargs)

Nesse exemplo, o modelo TarefaRelatorios tem um campo de chave estrangeira que referencia o modelo Tarefas. O atributo feito e nome em TarefaRelatorios é uma cópia do atributo feito em Tarefas.

Com esses modelos definidos, você pode criar um formulário que permita ao usuário modificar tanto as tarefas quanto seus respectivos relatórios usando os campos dos modelos Tarefas e TarefaRelatorios.

Espero ter ajudado.

Abraços e bons estudos!

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