Como o título diz, não consigo fazer as migrações funcionarem.
O aplicativo estava originalmente na versão 1.6, então eu entendo que as migrações não estarão lá inicialmente e, se eu executar python manage.py migrate
, recebo:
Operations to perform:
Synchronize unmigrated apps: myapp
Apply all migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
No migrations to apply.
Se eu fizer uma alteração em algum modelo myapp
, ele ainda será exibido como migrado, conforme o esperado.
Mas se eu correr python manage.py makemigrations myapp
, recebo:
No changes detected in app 'myapp'
Não parece importar o que ou como executo o comando, nunca está detectando o aplicativo como tendo alterações, nem está adicionando arquivos de migração ao aplicativo.
Existe alguma maneira de forçar um aplicativo para migrações e dizer essencialmente "Esta é a minha base para trabalhar" ou algo assim? Ou eu estou esquecendo de alguma coisa?
Meu banco de dados é um PostgreSQL, se é que isso ajuda.
fonte
Respostas:
Se você estiver mudando de um aplicativo existente criado no django 1.6, precisará executar uma pré-etapa (como descobri) listada na documentação:
A documentação não torna óbvio que você precisa adicionar o rótulo do aplicativo ao comando, pois a primeira coisa que ele solicita é
python manage.py makemigrations
que falhe. A migração inicial é feita quando você cria seu aplicativo na versão 1.7, mas se você veio da 1.6, ele não teria sido realizado. Consulte 'Adicionando migração para aplicativos' na documentação para obter mais detalhes.fonte
python manage.py makemigrations APP_LABEL
para cada um?./manage.py startapp
, mas eu ainda tinha que mencionar explicitamente o rótuloIsso pode acontecer devido aos seguintes motivos:
INSTALLED_APPS
listasettings.py
(é necessário adicionar o nome do aplicativo ou o caminho pontilhado à subclasse de AppConfig em apps.py na pasta do aplicativo, dependendo da versão do django que você está usando). Consulte a documentação: INSTALLED_APPSmigrations
pasta dentro desses aplicativos. (Solução: basta criar essa pasta).__init__.py
arquivo dentro damigrations
pasta desses aplicativos. (Solução: basta criar um arquivo vazio com o nome __init__.py )__init__.py
arquivo dentro da pasta do aplicativo. (Solução: basta criar um arquivo vazio com o nome __init__.py )models.py
arquivo no aplicativomodels.py
não herdadjango.db.models.Model
models.py
Nota: Um erro comum é adicionar uma
migrations
pasta no.gitignore
arquivo. Quando clonadas do repositório remoto,migrations
pastas e / ou__init__.py
arquivos estarão ausentes no repositório local. Isso causa problema.Sugiro que gitignore os arquivos de migração adicionando as seguintes linhas ao
.gitignore
arquivofonte
__init__.py
pasta junto com as migrações.You don't have __init__.py file inside migrations folder of those apps. (Solution: Just create an empty file with name __init__.py)
.. e ele foi causado por adicionar os arquivos para.gitignore
__init__.py
é necessário dentro de um diretório para tratá-lo como um pacote python. veja issoOk, parece que eu perdi uma etapa óbvia, mas postando isso no caso de alguém fazer o mesmo.
Ao atualizar para o 1.7, meus modelos se tornaram não gerenciados (
managed = False
) - eu os tinha comoTrue
antes, mas parece que ele foi revertido.A remoção dessa linha (para o padrão True) e a execução
makemigrations
imediata criaram um módulo de migração e agora está funcionando.makemigrations
não funcionará em tabelas não gerenciadas (o que é óbvio em retrospectiva)fonte
manage.py inspectdb
adiciona manage = False! no caso de importar bancos de dados herdados, você deve ajustá-lo com cuidado!app_label
é o mesmoMinha solução não foi abordada aqui, por isso estou publicando. Eu estava usando
syncdb
para um projeto - apenas para colocá-lo em funcionamento. Então, quando tentei começar a usar as migrações do Django, ele as falsificou no começo e depois dizia que estava 'OK', mas nada estava acontecendo com o banco de dados.Minha solução foi apenas excluir todos os arquivos de migração para o meu aplicativo, bem como os registros do banco de dados para as migrações de aplicativos na
django_migrations
tabela.Então eu fiz uma migração inicial com:
./manage.py makemigrations my_app
Seguido por:
./manage.py migrate my_app
Agora eu posso fazer migrações sem problemas.
fonte
__init.py__
, não vai funcionar.Concorde com @furins. Se tudo estiver em ordem e ainda assim esse problema surgir, verifique se existe algum método de propriedade com o mesmo título que o atributo que você está tentando adicionar na classe Model.
fonte
Esse é um erro estúpido de cometer, mas ter uma vírgula extra no final da linha de declaração de campo na classe model, faz com que a linha não tenha efeito.
Isso acontece quando você copia e cola o def. da migração, que é definida como uma matriz.
Embora talvez isso ajude alguém :-)
fonte
Talvez eu esteja atrasado, mas você tentou ter uma
migrations
pasta no seu aplicativo com um__init__.py
arquivo?fonte
Talvez isso ajude alguém. Eu estava usando um aplicativo aninhado. project.appname e eu realmente tinha project e project.appname em INSTALLED_APPS. A remoção do projeto de INSTALLED_APPS permitiu que as alterações fossem detectadas.
fonte
A resposta está nesta postagem de stackoverflow, por cdvv7788 Migrations in Django 1.7
Eu estava tendo exatamente o mesmo problema e as opções acima funcionaram perfeitamente.
Mudei meu aplicativo django para cloud9 e, por algum motivo, nunca peguei a migração inicial.
fonte
A seguir trabalhou para mim:
Trabalhou para mim: Python 3.4, Django 1.10
fonte
Pessoas como eu que não gostam de migrações podem usar as etapas abaixo.
python manage.py makemigrations app_label
para a migração inicial.python manage.py migrate
para criar tabelas antes de fazer alterações.Se você confundiu alguma dessas etapas, leia os arquivos de migração. Altere-os para corrigir seu esquema ou remover arquivos indesejados, mas não esqueça de alterar a parte das dependências do próximo arquivo de migração;)
Espero que isso ajude alguém no futuro.
fonte
Você deseja verificar o
settings.py
naINSTALLED_APPS
lista e garantir que todos os aplicativos com modelos estão listados lá.A execução
makemigrations
na pasta do projeto significa que ele atualizará todas as tabelas relacionadas a todos os aplicativos incluídos nosettings.py
projeto. Depois de incluí-lo,makemigrations
o aplicativo será incluído automaticamente (isso economiza muito trabalho, para que você não precise executarmakemigrations app_name
todos os aplicativos do seu projeto / site).fonte
Apenas no caso de você ter um campo específico que não seja identificado pelas migrações: verifique duas vezes se você possui uma propriedade com o mesmo nome.
exemplo:
a propriedade substituirá a definição do campo para que as alterações não sejam identificadas por
makemigrations
fonte
hourly_rate = models.DecimalField
(faltando o final '()') e ele simplesmente falhou silenciosamente.Verifique se o seu modelo não é
abstract
. Na verdade, cometi esse erro e demorou um pouco, então pensei em publicá-lo.fonte
Adicionando esta resposta porque somente esse método me ajudou.
Eu apaguei a
migrations
pasta runmakemigrations
emigrate
.Ainda dizia: Não há migrações para aplicar.
Eu fui para a
migrate
pasta e abri o último arquivo criado,comente a migração que eu queria (foi detectada e inserida lá)
e execute
migrate
novamente.Isso basicamente edita o arquivo de migrações manualmente.
Faça isso apenas se você entender o conteúdo do arquivo.
fonte
Você usou
schemamigration my_app --initial
depois de renomear a pasta de migração antiga? Tente. Pode funcionar. Caso contrário - tente recriar o banco de dados e faça com que o syncdb + migre. Funcionou para mim ...fonte
schemamigration
existe - acho que faz parte do sul? Atualmente, não tenho uma pasta de migração. Remover minhamodels.py
e executar novamenteinspectdb
não parecia fazer nada.schemamigration
era do sul.makemigrations
é o seu substituto.makemigrations --empty
Teve o mesmo problema Verifique se quaisquer classes que você definiu em models.py, você deve herdar a classe models.Model.
fonte
Eu tive o mesmo problema em ter que executar migrações migratórias duas vezes e todo tipo de comportamento estranho. A raiz do problema foi que eu estava usando uma função para definir datas padrão nos meus modelos, de modo que as migrações detectavam uma alteração toda vez que eu fazia migrações. A resposta a esta pergunta me colocou no caminho certo: Evite que as migrações migrem para recriar o campo de data
fonte
Atualizei recentemente o Django de 1.6 para 1.8 e tinha poucos aplicativos e migrações para eles. Eu usei o sul e
schemamigrations
para criar migrações no Django 1.6, que é descartado no Django 1.8.Quando adicionei novos modelos após a atualização, o
makemigrations
comando não estava detectando nenhuma alteração. E então eu tentei a solução sugerida por @drojf (1ª resposta), funcionou bem, mas não conseguiu aplicar a migração inicial falsa (python manage.py --fake-initial
). Eu estava fazendo isso porque minhas tabelas (tabelas antigas) já foram criadas.Finalmente, isso funcionou para mim, removeu novos modelos (ou alterações de modelo) de models.py e, em seguida, tive que excluir (ou renomear para pasta de migrações de backup de segurança) de todos os aplicativos e executar
manage.py
makemigrations python para todos os aplicativospython manage.py migrate --fake-initial
. Isso funcionou como um encanto. Depois que a migração inicial é criada para todos os aplicativos e a migração inicial falsa é adicionada, adicionamos novos modelos e seguimos o processo regularmakemigrations
e migramos nesse aplicativo. As alterações foram detectadas agora e tudo correu bem.Eu apenas pensei em compartilhá-lo aqui, se alguém enfrentar o mesmo problema (tendo
schemamigrations
do sul para seus aplicativos), isso poderá ajudá-los :)fonte
Talvez isso possa ajudar alguém, eu tive o mesmo problema.
Eu já criei duas tabelas com a classe serializador e as visualizações. Então, quando eu quis atualizar, tive esse erro.
Eu segui estas etapas:
.\manage.py makemigrations app
.\manage.py migrate
models.py
1
e2
.models.py
5
.Se você trabalha com Pycharm, o histórico local é muito útil.
fonte
Talvez isso ajude alguém.
Excluí meu
models.py
e esperavamakemigrations
criarDeleteModel
instruções.Lembre-se de excluir
*.pyc
arquivos!fonte
As migrações controlam as alterações no banco de dados; portanto, se você estiver mudando de não gerenciado para gerenciado, precisará verificar se a tabela do banco de dados está atualizada em relação ao modelo com o qual está lidando.
Se você ainda estiver no modo dev, eu pessoalmente decidi excluir os arquivos de migração no meu IDE e também na tabela django_migrations relacionada ao meu Model e execute novamente o comando acima.
LEMBRE-SE: se você tiver uma migração que termina com _001 no seu IDE e _003 no seu banco de dados. O Django verá apenas se você possui uma migração terminada com _004 para atualizar alguma coisa.
Os 2 (migrações de código e banco de dados) estão vinculados e funcionam em conjunto.
Feliz codificação.
fonte
fonte
Adicionamos esta resposta porque nenhum dos outros disponíveis acima funcionou para mim.
No meu caso, algo ainda mais estranho estava acontecendo ( Django 1.7 Versão ), no meu models.py eu tinha uma linha "extra" no final do meu arquivo (era uma linha em branco) e quando executei o
python manage.py makemigrations
comando, o resultado foi: "nenhuma alteração detectada".Para corrigir isso, excluí essa "linha em branco" que estava no final do meu arquivo models.py e executei o comando novamente, tudo foi corrigido e todas as alterações feitas no models.py foram detectadas!
fonte
Pode ser necessário falsificar as migrações iniciais usando o comando abaixo
fonte
Primeiro, esta solução é aplicável àqueles que enfrentam o mesmo problema durante a implantação no servidor heroku, eu estava enfrentando o mesmo problema.
Para implantar, há uma etapa obrigatória que é adicionar django_heroku.settings (locals ()) no arquivo settings.py.
Alterações: Quando mudei a linha acima para django_heroku.settings (locals (), database = False), funcionou perfeitamente.
fonte
No meu caso, eu precisei adicionar meu modelo ao arquivo _ init _.py da pasta models em que meu modelo foi definido:
fonte
Adicionando meu 2c, já que nenhuma dessas soluções funcionou para mim, mas isso funcionou ...
Eu tinha acabado de correr
manage.py squashmigrations
e remover as migrações antigas (os arquivos e as linhas na tabela do banco de dados django.migrations).Isso deixou uma linha como esta no último arquivo de migração:
Isso aparentemente confundiu o Django e causou um comportamento estranho: a execução
manage.py makemigrations my_app
recriaria a migração inicial como se não existisse. A remoção dareplaces...
linha corrigiu o problema!fonte
python manage.py makemigrations accounts Migrações para 'accounts': accounts \ migrations \ 0001_initial.py - Criar modelo Cliente - Criar modelo Tag - Criar modelo Tag - Criar modelo Produto - Criar modelo Pedido
Nota: aqui "contas" é o nome do meu aplicativo
fonte