1
resposta

Makemigrations de Pessoas (ForeignKey)

Porque tenho que apagar todos os dados da tabela de receita antes de aplicar a alteração na tabela?

Se depararmos em nosso dia-a-dia uma situação como essa, precisarei apagar as informações da tabela? Para esse caso precisamos criar o atributo manualmente em nosso banco de dados?

1 resposta

Olá Leandro, como você está?

Peço desculpas pela demora em obter um retorno.

Neste caso, para fins didáticos a tabela foi apagada, mas no dia a dia, geralmente já mapeamos os modelos do banco já sabendo que teremos uma chave estrangeira, então, todo o processo de criação de todos os apps são feitos no início e com isso, as chaves estrangeiras já estarão presentes no modelo.

Todavia, há uma forma de adicionar uma foreign key (FK) em uma tabela no Django sem precisar deletar os registros já existentes. Você pode fazer isso adicionando a FK como nullable (ou seja, permitindo valores nulos) e, em seguida, atualizando gradualmente os registros existentes para terem um valor válido na coluna da FK.

Por exemplo:

class Receita(models.Model):
    pessoa = models.ForeignKey(Pessoa, null=True, blank=True, on_delete=models.CASCADE)
    # restante do modelo

Observe que adicionamos null=True e blank=True ao campo da FK para permitir valores nulos.

Já para atualizar gradualmente os dados existentes, podemos criar um arquivo python separadamente, por exemplo utils.py e executar o código abaixo:

from minhaapp.models import Receita, Pessoa

def atualizar_receitas_com_pessoa():
    # recupere todas as receitas sem uma pessoa associada
    receitas_sem_pessoa = Receita.objects.filter(pessoa=None)

    # atualize gradualmente cada receita sem pessoa
    for receita in receitas_sem_pessoa:
        # defina a pessoa associada a essa receita (por exemplo, a primeira pessoa encontrada)
        pessoa_associada = Pessoa.objects.first()
        receita.pessoa = pessoa_associada
        receita.save()

Em seguida, você pode chamar a função atualizar_receitas_com_pessoa() de qualquer lugar do seu código e isso permitirá que você atualize gradualmente as receitas existentes com valores válidos na coluna da FK sem precisar excluí-las do banco de dados.

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

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

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software