1
resposta

Criar campos atraves do models

Prezados, boa tarde.

Sei que através do models.py consigo criar campos na tabela do postgree.

Acontece que por algum motivo tenho que rodar novamente a migração que criei no models.py só que nao esta dando certo.

Meus passos:

Exclui diretamente no banco de dados na tabela receitas_receita o campo foto_receita (por N razoes).

Fui no pycharm e exclui da pasta receitas\migrations\ o arquivo 0004_receita_foto_receita.py

Fui na venv e rodei de novo o python manage.py makemigrations e depois python manage.py migrate.

Apesar de criar o arquivo na pasta migrations NÃO CRIA o campo no bd novamente.

Porque?

Grato.

1 resposta

Olá Nelson, tudo bem com você?

Peço desculpas pela demora no retorno.

Conforme descrito na documentação do Django algumas migrações podem não ser detectadas da forma que esperamos, dessa forma, será necessário realizarmos alterações no arquivo de migração criado, de forma que seja informado que queremos criar um novo campo.

Para isso, basta seguir os passos abaixo.

  • No arquivo receitas/models.py, faça uma alteração no campo foto_receita de forma que o Django possa reconhecer que houve alterações, você pode adicionar o atributo verbose_name= que recebe o nome legível do campo. Como no exemplo abaixo.

      foto_receita = models.ImageField(upload_to='fotos/%d/%m/%Y', blank=True, verbose_name='Foto da Receita')
  • Após salvar a alteração, devemos gerar a migração, com o comando abaixo.

      python manage.py makemigrations
    

Será criado um novo arquivo para a migração, esse arquivo será criado na pasta receitas/migrations, será o último arquivo criado, abra o arquivo para realizarmos uma alteração na migração.

  • No atributo operations, iremos trocar o uso da classe migrations.AlterField (alterar campo) para a classe migrations.AddField (adicionar campo). O atributo operations ficará como apresentado abaixo.

      operations = [
              migrations.AddField(
                  model_name='receita_nova',
                  name='foto_receita',
                  field=models.ImageField(blank=True, upload_to='fotos/%d/%m/%Y', verbose_name='Fotos da Receita'),
              ),
          ]

Lembrando que os tributos model_name=, name= correspondem respectivamente à, nome da tabela e nome da coluna esses nomes podem ser diferentes do meu projeto para o seu projeto.

Após realizar a alteração, salve o arquivo e execute no terminal o comando para realizar a migração.

python manage.py migrate

Dentro do pgAdmin 4, clique com o botão direito no nome da tabela de receitas, e no menu de contexto que será aberto, clique em refresh para atualizar a tabela, nesse momento será apresentado a coluna foto_receita.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

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