2016-03-22 15 views
28

Con un'app esistente stavo cercando di creare migrazioni, usando il comando makemigrations ma dice "Nessuna modifica rilevata".Django 1.9 - makemigrations - Nessuna modifica rilevata

Generalmente creo nuove app utilizzando il comando startapp ma questa app non lo era.

Dopo un po 'di debug, ho scoperto che non si sta creando migrazione perché il pacchetto/cartella migrations non è presente in un'app.

Sarà meglio crea la cartella se non c'è o forse mi manca qualcosa

+6

Avete il vostro app aggiunto INSTALLED_APPS? – wolendranh

+3

Sì, è nell'app installata, per la prima volta, è meglio usare 'makemigrations ' come indicato anche da Alasdair. – Dilraj

+0

Rimuovi 'abstract = True' :) – GrvTyagi

risposta

71

Per creare migrazioni iniziali per un app, eseguire makemigrations e specificare il nome dell'applicazione. La cartella migrazioni verrà creata.

./manage.py makemigrations <myapp> 

La tua app deve essere inclusa in INSTALLED_APPS prima.

+2

Qualche idea del perché ci obbliga a specificare l'app? – maazza

+7

@maazza è necessario specificare il nome dell'app se l'app non ha la cartella 'migrations'. Questo potrebbe accadere se hai creato l'app manualmente o se hai eseguito l'aggiornamento da una versione precedente di Django che non ha avuto migrazioni. – Alasdair

+0

@maazza In realtà è necessario un pacchetto python (con '__init __. Py') denominato 'migrazioni' nell'app. – Jibin

4

Ci sono volte quando ./manage.py makemigrations è superiore a ./manage.py makemigrations <myapp> perché può gestire determinati conflitti tra le app.

Queste occasioni si verificano in silenzio e occorrono diverse ore di swearing per comprendere il vero significato del temuto messaggio No changes detected.

Pertanto, si tratta di una scelta di gran lunga migliore di utilizzare il seguente comando:

./manage.py makemigrations <myapp1> <myapp2> ... <myappN>

8

Ho letto molte risposte a questa domanda, spesso dichiarando di eseguire semplicemente makemigrations in qualche altro modo. Ma per me, il problema era nella sottoclasse Meta dei modelli.

Ho un config app che dice label = <app name> (nel file apps.py, accanto models.py, views.py ecc). Se per caso (ad esempio perché stai dividendo un'app troppo grande in più), la tua meta classe non ha la stessa etichetta, non vengono rilevate modifiche (e nessun messaggio di errore utile di sorta). Quindi nella mia classe di modello che ho ora:

class ModelClassName(models.Model): 

    class Meta: 
     app_label = '<app name>' # <-- this label was wrong before. 

    field_name = models.FloatField() 
    ... 

In esecuzione Django 1.10 qui.

3

È un commento, ma dovrebbe probabilmente essere una risposta.

Assicurati che il nome della tua app sia in settings.py INSTALLED_APPS altrimenti, qualunque cosa tu faccia, non eseguirà le migrazioni.

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 

    'blog', 
] 

Poi gestita:

./manage.py makemigrations blog 
2

Il mio problema (e quindi la soluzione) ma era diverso da quelli sopra descritti.

Non stavo usando il file models.py, ma ho creato una directory models e creato il file my_model.py lì, dove ho messo il mio modello. Django non è riuscito a trovare il mio modello così ha scritto che non ci sono migrazioni da applicare.

La mia soluzione era: nel file my_app/models/__init__.py ho aggiunto questa linea: from .my_model import MyModel

+0

Ho avuto lo stesso problema :) Thx –

Problemi correlati