Eu estava tentando criar migrações em um aplicativo existente usando o comando makemigrations, mas ele produz "Nenhuma alteração detectada".
Geralmente, crio novos aplicativos usando o startapp
comando, mas não o usei para esse aplicativo quando o criei.
Após a depuração, descobri que ele não está criando a migração porque o migrations
pacote / pasta está ausente em um aplicativo.
Seria melhor se ele criar a pasta se ela não estiver lá ou estiver faltando alguma coisa?
python
django
django-migrations
Dilraj
fonte
fonte
makemigrations <myapp>
como Alasdair apontou também.Respostas:
Para criar migrações iniciais para um aplicativo, execute
makemigrations
e especifique o nome do aplicativo. A pasta de migrações será criada.Seu aplicativo deve ser incluído
INSTALLED_APPS
primeiro (dentro de settings.py).fonte
migrations
pasta. Isso pode acontecer se você criou o aplicativo manualmente ou atualizou a partir de uma versão mais antiga do Django que não possui migrações.__init__.py
) chamado 'migrations' no aplicativo.migrate
.Meu problema (e, portanto, solução) ainda era diferente dos descritos acima.
Eu não estava usando o
models.py
arquivo, mas criei ummodels
diretório e criei omy_model.py
arquivo lá, onde coloquei meu modelo. O Django não conseguiu encontrar meu modelo, por isso escreveu que não há migrações a serem aplicadas.Minha solução foi: no
my_app/models/__init__.py
arquivo eu adicionei esta linha:from .my_model import MyModel
fonte
Existem vários motivos possíveis para o django não detectar o que migrar durante o
makemigrations
comando.INSTALLED_APPS
.dictmakemigrations -v 3
verbosidade começa executando para verbosidade. Isso pode lançar alguma luz sobre o problema.INSTALLED_APPS
que é recomendado para especificar o módulo caminho completo aplicativo config 'apply.apps.MyAppConfig'manage.py makemigrations --settings mysite.settings
manage.py makemigrations myapp
- que restringe as migrações somente para o aplicativo e ajuda a isolar o problema.meta modelo verificar você tem o direito
app_label
em seu modelo metaDebug django script de depuração do django core. O comando makemigrations é bastante direto. Veja como fazê-lo em pycharm . alterar a sua definição de script em conformidade (ex:
makemigrations --traceback myapp
)Vários bancos de dados:
allow_syncdb
método.fonte
from recurrence.forms import RecurrenceField
mas deveria ter sidofrom recurrence.fields import RecurrenceField
.makemigrations
script procura modelos que estão conectadosurls.py
". Encontrado aqui stackoverflow.com/questions/43093651/…python manage.py makemigrations -v 3 <app_name>
Eu já li muitas respostas para essa pergunta, afirmando simplesmente executar de
makemigrations
outras maneiras. Mas para mim, o problema estava naMeta
subclasse de modelos.Eu tenho uma configuração de aplicativo que diz
label = <app name>
(noapps.py
arquivo, ao ladomodels.py
,views.py
etc). Se, por acaso, sua classe meta não tiver o mesmo rótulo que o rótulo do aplicativo (por exemplo, porque você está dividindo um aplicativo grande demais em vários), nenhuma alteração será detectada (e nenhuma mensagem de erro útil). Então, na minha classe de modelo, tenho agora:Executando o Django 1.10 aqui.
fonte
É um comentário, mas provavelmente deve ser uma resposta.
Verifique se o nome do seu aplicativo está em settings.py,
INSTALLED_APPS
caso contrário, não importa o que você faça, não executará as migrações.Então corra:
fonte
Eu tive outro problema não descrito aqui, o que me deixou louco.
Eu tinha um ',' à direita, em uma linha, talvez de copiar e colar. A linha com is_dumb não criou uma migração de modelo com './manage.py makemigrations', mas também não gerou um erro. Depois de remover o ',' funcionou como esperado.
Portanto, tenha cuidado ao copiar e colar :-)
fonte
is_dumb
é igual a(models.BooleanField(default=False), )
quemakemigrations
não sabe como converter em uma coluna do banco de dados.Às vezes, quando
./manage.py makemigrations
é superior,./manage.py makemigrations <myapp>
porque ele pode lidar com certos conflitos entre aplicativos.Essas ocasiões ocorrem silenciosamente e leva várias horas
swearing
para entender o real significado daNo changes detected
mensagem temida .Portanto, é uma escolha muito melhor usar o seguinte comando:
./manage.py makemigrations <myapp1> <myapp2> ... <myappN>
fonte
Eu copiei uma tabela de fora do django e a classe Meta assumiu o padrão "managed = false". Por exemplo:
Ao mudar manged para True, as migrações começaram a captar as alterações.
fonte
fonte
Eu resolvi esse problema fazendo o seguinte:
fonte
Esqueci de colocar argumentos corretos:
em models.py e, em seguida, começou a deixar cair esse irritante
Nenhuma alteração detectada no aplicativo 'myApp'
fonte
Outro motivo possível é se você definiu alguns modelos em outro arquivo (não em um pacote) e não o referenciou em nenhum outro lugar.
Para mim, simplesmente adicionando
from .graph_model import *
aadmin.py
(ondegraph_model.py
foi o novo arquivo) corrigiu o problema.fonte
Meu problema era muito mais simples do que as respostas acima e provavelmente um motivo muito mais comum, desde que seu projeto já esteja configurado e funcionando. Em um dos meus aplicativos que trabalhavam há muito tempo, as migrações pareciam complicadas, então, com pressa, fiz o seguinte:
O que ??
Por engano, eu também removi todos os
__init__.py
arquivos :( - Tudo estava funcionando novamente depois que entrei e:Para cada um dos meus aplicativos,
makemigrations
funcionou novamente.Acontece que eu criei manualmente um novo aplicativo copiando outro e esqueci de colocar o arquivo
__init__.py
namigrations
pasta e isso me confinou que tudo estava errado - levando a piorar com orm -r
descrito acima.Espero que isso ajude alguém a xingar o erro "Nenhuma alteração detectada" por algumas horas.
fonte
A solução é que você precise incluir seu aplicativo em INSTALLED_APPS.
Eu perdi e encontrei esse mesmo problema.
depois de especificar a migração do nome do meu aplicativo se tornou bem-sucedida
observe que mencionei as placas por último, que é o nome do meu aplicativo.
fonte
INSTALLED_APPS = [
]
certifique-se de 'blog.apps.BlogConfig', (isso está incluído no seu settings.py para fazer migrações no seu aplicativo)
em seguida, execute o blog python3 manage.py makemigrations ou o nome do seu aplicativo
fonte
Uma questão muito idiota que você pode ter também é definir dois
class Meta
no seu modelo. Nesse caso, qualquer alteração na primeira não será aplicada durante a execuçãomakemigrations
.fonte
Sei que essa é uma pergunta antiga, mas lutei com esse mesmo problema o dia todo e minha solução foi simples.
Eu tive minha estrutura de diretórios algo ao longo das linhas de ...
E como todos os outros modelos até o modelo com o qual eu tinha problemas estavam sendo importados para outro lugar que acabou importando do
main_app
qual estava registrado noINSTALLED_APPS
, tive a sorte de que todos eles funcionaram.Mas desde que eu só acrescentou cada
app
paraINSTALLED_APPS
e não oapp_sub*
quando eu finalmente acrescentou um novo arquivo de modelos que não foi importado qualquer outro lugar, Django totalmente ignorado-lo.Minha correção foi adicionar um
models.py
arquivo ao diretório base de cada umapp
assim ...e adicione
from apps.app.app_sub1 import *
e assim por diante a cada um dos arquivos deapp
nívelmodels.py
.Bleh ... isso me levou tanto tempo para descobrir e eu não consegui encontrar a solução em nenhum lugar ... Eu até fui para a página 2 dos resultados do google.
Espero que isso ajude alguém!
fonte
Eu tive um problema semelhante com o django 3.0, de acordo com a seção de migrações na documentação oficial , executando isso foi suficiente para atualizar minha estrutura de tabela:
Mas a saída sempre foi a mesma: 'nenhuma alteração detectada' sobre meus modelos depois de executar o script 'makemigrations'. Eu tive um erro de sintaxe em models.py no modelo que eu queria atualizar no db:
ao invés de:
Resolvendo esse erro estúpido, com esses comandos a migração foi feita sem problemas. Talvez isso ajude alguém.
fonte
Você deve adicionar
polls.apps.PollsConfig
aINSTALLED_APPS
emsetting.py
fonte
No meu caso, esqueci de inserir os argumentos da classe
Errado:
Corrigir
fonte
No meu caso, adicionei um campo ao modelo e o Django disse que não há alterações.
Depois que eu decidi alterar o "nome da tabela" do modelo, as migrações funcionaram. Depois alterei o nome da tabela para o padrão, e o novo campo também estava lá.
Há um "bug" no sistema de migração do django, às vezes ele não vê o novo campo. Pode estar relacionado ao campo de data.
fonte
O possível motivo pode ser a exclusão do arquivo db existente e da pasta de migrações. Você pode usar python.
manage.py makemigrations <app_name>
Isso deve funcionar. Uma vez eu enfrentei um problema semelhante.fonte
Mais um caso de ponta e solução:
Adicionei um campo booleano e, ao mesmo tempo, adicionei uma propriedade @ referenciando-o, com o mesmo nome (doh). Comentou a propriedade e a migração vê e adiciona o novo campo. Renomeou a propriedade e tudo é bom.
fonte
Se você possui o
managed = True
modelo Meta, é necessário removê-lo e fazer uma migração. Em seguida, execute as migrações novamente, ele detectará as novas atualizações.fonte
Ao adicionar novos modelos ao aplicativo django api e executar
python manage.py makemigrations
a ferramenta, não detectou novos modelos.O estranho é que os modelos antigos foram escolhidos
makemigrations
, mas isso foi porque eles foram referenciados naurlpatterns
cadeia e a ferramenta de alguma forma os detectou. Portanto, fique de olho nesse comportamento.O problema ocorreu porque a estrutura de diretórios correspondente ao pacote de modelos tinha subpacotes e todos os
__init__.py
arquivos estavam vazios. Eles devem importar explicitamente todas as classes necessárias em cada subpasta e nos modelos__init__.py
para o Django buscá-las com amakemigrations
ferramenta.fonte
Tente registrar seu modelo no admin.py, veja um exemplo: - admin.site.register (YourModelHere)
Você pode fazer o seguinte: - 1. admin.site.register (YourModelHere) # No admin.py 2. Recarregue a página e tente novamente 3. Pressione CTRL-S e salve 4. Pode haver um erro, especialmente nos modelos .py e admin.py 5. Ou, no final de tudo, basta reiniciar o servidor
fonte
Espero que isso ajude alguém, pois acabei passando horas tentando perseguir isso.
Se você tiver uma função no seu modelo com o mesmo nome, isso removerá o valor. Bastante óbvio em retrospectiva, mas mesmo assim.
Então, se você tem algo parecido com isto:
Nesse caso, a função substituirá a configuração acima, tornando-a "invisível" para
makemigrations
.fonte
A melhor coisa que você pode fazer é excluir o banco de dados existente. No meu caso, eu estava usando o banco de dados phpMyAdmin SQL, então excluí manualmente o banco de dados criado.
Após a exclusão: eu crio o banco de dados no PhpMyAdmin e não adiciono nenhuma tabela.
Novamente, execute os seguintes comandos:
python manage.py makemigrations
python manage.py migrate
Após estes comandos : Você pode ver que o django criou automaticamente outras tabelas necessárias no banco de dados (aproximadamente 10 tabelas).
python manage.py makemigrations <app_name>
python manage.py migrate
E por último: Após os comandos acima, todo o modelo (tabela) que você criou é importado diretamente para o banco de dados.
Espero que isso ajude.
fonte
Meu problema com esse erro foi que eu incluí:
Modelo interno para o qual eu queria criar a migração.
fonte
Eu tive um problema diferente ao criar um novo aplicativo chamado
deals
. Eu queria separar os modelos dentro desse aplicativo para ter dois arquivos de modelo nomeadosdeals.py
edealers.py
. Ao executarpython manage.py makemigrations
eu tenho:No changes detected
.Fui em frente e dentro do
__init__.py
que mora no mesmo diretório em que meus arquivos de modelo residiam (negócios e revendedor).E então o
makemigrations
comando funcionou.Acontece que, se você não estiver importando os modelos em nenhum lugar OU o nome do arquivo dos modelos não estiver
models.py
, os modelos não serão detectados.Outro problema que aconteceu comigo é a maneira como escrevi o aplicativo
settings.py
:Eu tinha:
Deveria estar incluindo a pasta do projeto raiz:
fonte