1
resposta

Inserir FK em bancos sem precisar deletar dados já inseridos

Bom dia. Na aula 02, ao inserir a FK para linkar o modelo de receitas com o modelo de pessoas nós tivemos que deletar todos as receitas já inseridas no banco. Supondo que tenhamos um banco muito grande, isso provavelmente seria um transtorno. Há uma forma de adc a FK sem precisar deletar os registros da tabela do banco?

Att

1 resposta

Olá Leonardo, como você está?

Peço desculpas pela demora em obter um retorno.

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!