2015-04-28 7 views
32

Sto provando a migrare da Django 1.6 a Django 1.8. Stavo usando South per la gestione di migrations in Django 1.6. Ho creato con successo nuovi file di migrazione da python manage.py makemigrations. durante l'esecuzione python manage.py migrate --fake-initial, sto ottenendo questo erroreErrore durante la creazione di nuovi tipi di contenuto. Assicurati di migrare contenttypes prima di provare a migrare le app individualmente

Traceback (most recent call last): 
    File "manage.py", line 39, in <module> 
    execute_from_command_line(sys.argv) 
    File "/home/jonty/.virtualenvs/squadrun/local/lib/python2.7/site- packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
    utility.execute() 
    File "/home/jonty/.virtualenvs/squadrun/local/lib/python2.7/site- packages/django/core/management/__init__.py", line 330, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/home/jonty/.virtualenvs/squadrun/local/lib/python2.7/site-packages/django/core/management/base.py", line 390, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/home/jonty/.virtualenvs/squadrun/local/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute 
    output = self.handle(*args, **options) 
    File "/home/jonty/.virtualenvs/squadrun/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 225, in handle 
    emit_post_migrate_signal(created_models, self.verbosity, self.interactive, connection.alias) 
    File "/home/jonty/.virtualenvs/squadrun/local/lib/python2.7/site-packages/django/core/management/sql.py", line 280, in emit_post_migrate_signal 
using=db) 
    File "/home/jonty/.virtualenvs/squadrun/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py", line 201, in send 
response = receiver(signal=self, sender=sender, **named) 
    File "/home/jonty/.virtualenvs/squadrun/local/lib/python2.7/site-packages/django/contrib/auth/management/__init__.py", line 82, in create_permissions 
    ctype = ContentType.objects.db_manager(using).get_for_model(klass) 
    File "/home/jonty/.virtualenvs/squadrun/local/lib/python2.7/site-packages/django/contrib/contenttypes/models.py", line 78, in get_for_model 
    "Error creating new content types. Please make sure contenttypes " 

Uno dei file di migrazione 0001_initial.py dice:

dependencies = [ 
    ('auth', '0006_require_contenttypes_0002'), 
    ('clients', '0002_auto_20150428_1551'), 
    ('players', '0001_initial'), 
] 

che credo sia particolarmente il problema. Quale potrebbe essere la soluzione alternativa a questo problema. Qualsiasi aiuto sarà apprezzato.

+0

La dipendenza autenticazione 0006 deve garantire che 'contenttypes' viene migrato prima che il segnale migrazione post viene eseguito. Qual è l'errore se si esegue manualmente 'ContentType.objects.get (app_label = , model_name = )'? – knbk

+0

'La query di corrispondenza ContentType non esiste' – Shubham

+0

E con' get_or_create() '? – knbk

risposta

40

Penso che questo abbia qualcosa a che fare con "La rimozione di ContentType.name", secondo this. Ma in qualche modo non funziona.

Rimuovere manualmente la colonna name dalla tabella 'django_content_type'. Per esempio.

'ALTER TABLE django_content_type DROP COLUMN name'

sono stato in grado di applicare le migrazioni. Forse questo può portarti un po 'oltre.

+1

Sono riuscito a fare questo lavoro eliminando completamente la tabella 'django_content_type' ed eseguendo la migrazione. Sì ed è perché il 'nome' è stato rimosso in' Django 1.8'. – Shubham

+0

Un'altra opzione, creare un database temporaneo, fare un syncdb ecc., Quindi copiare la tabella django_content_type nel database del problema. – PhoebeB

+0

Esiste 'django/contrib/contenttypes/migrations/0002_remove_content_type_name.py' in Django 1.8. Non ho controllato quando è stato aggiunto. –

3

Potrebbe sembrare strano ma ho risolto questo aggiornando alla versione 1.8 di Django. Inizialmente usavo ver 1.7

+0

L'aggiornamento a una versione più recente ha risolto il mio problema. Grazie! –

-3

Spegnere il server deve essere aperto in un terminale diverso e provare a migrare funzionerà!

8

Nel mio caso, ciò che ho fatto per risolvere questo problema è stato l'aggiornamento a una versione più recente di Django. Se si lavora con Mac basta fare:

  1. pip installare Django --upgrade
  2. makemigrations pitone manage.py
  3. pitone manage.py migrare
16

tenta di migrare applicazioni autenticazione prima, e altri:

manage.py migrate auth 
manage.py migrate <app_name> 
+0

Questo ha funzionato come un fascino. Grazie Mojtaba :) – Stryker

+0

@Stryker Sono così felice di sentire che :) –

+0

questo ha fatto per me, grazie – ministry

2

Aggiungere al commento by @int_ua Aggiungilo come dipendenza alla migrazione non riuscita:

dependencies = [ 
    ('contenttypes', '0002_remove_content_type_name'), 
] 

Quindi eseguire nuovamente la migrazione.

0

ho dovuto unire due sistemi in Django 1.9.1 e io non riuscivo a superare questo errore:

"Error creating new content types. Please make sure contenttypes " 

Ampia googling e stackoverflowing era inutile. Infine, ho aggiunto la riga di debug a

~/.virtualenvs/(venv_name) /lib/python2.7/site-packages/django/contrib/contenttypes/models.py

except (OperationalError, ProgrammingError, IntegrityError): 
     # It's possible to migrate a single app before contenttypes, 
     # as it's not a required initial dependency (it's contrib!) 
     # Have a nice error for this. 
     print "\n\nError for Content type model "+opts.model_name+"\n\n" 
     raise RuntimeError(
      "Error creating new content types. Please make sure contenttypes " 
      "is migrated before trying to migrate apps individually." 
     ) 

Questo mi ha detto i nomi dei modelli che causavano l'errore e, infine, ha portato alla correzione.

Sto utilizzando Postgres ei numeri di sequenza per le tabelle django_content_type e auth_permission non puntavano verso la fine della tabella, causando errori negli inserimenti.

Queste 2 linee fisse che (basata su questo SO post)

SELECT pg_catalog.setval(pg_get_serial_sequence('django_content_type', 'id'), (SELECT MAX(id) FROM django_content_type)+1); 
SELECT pg_catalog.setval(pg_get_serial_sequence('auth_permission', 'id'), (SELECT MAX(id) FROM auth_permission)+1); 
Problemi correlati