2015-04-28 14 views
32

Ich versuche, von Django 1.6 zu Django 1.8 zu migrieren. Ich benutzte South für die Verwaltung migrations in Django 1.6. Ich habe erfolgreich neue Migrationsdateien von python manage.py makemigrations erstellt. während python manage.py migrate --fake-initial läuft, ich diesen FehlerFehler beim Erstellen neuer Inhaltstypen. Stellen Sie sicher, dass contenttypes migriert wird, bevor Sie versuchen, Apps einzeln zu migrieren.

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 " 

Einer der Migrationsdatei 0001_initial.py sagt immer bin:

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

die ich schätze, ist vor allem das Problem. Was könnte die Problemumgehung dieses Problems sein? Jede Hilfe wird geschätzt.

+0

Die Abhängigkeit von Auth 0006 sollte sicherstellen, dass 'contenttypes' migriert wird, bevor die nach der Migration Signal ausgeführt wird. Was ist der Fehler, wenn Sie 'ContentType.objects.get manuell ausführen (app_label = , modelname = )'? – knbk

+0

'ContentType passende Abfrage existiert nicht' – Shubham

+0

Und mit' get_or_create() '? – knbk

Antwort

40

Ich denke, das hat etwas mit "Die Entfernung von ContentType.name" zu tun, nach this. Aber irgendwie funktioniert es nicht.

Durch manuelle Entfernung der Spalte name aus der Tabelle 'django_content_type'. Z.B.

'ALTER TABLE django_content_type DROP COLUMN name'

konnte ich die Migrationen anzuwenden. Vielleicht kann dich das ein bisschen weiter bringen.

+1

Ich konnte das schaffen, indem ich die Tabelle 'django_content_type' komplett lösche und die Migration durchführe. Ja, und das liegt daran, dass der 'Name' in' Django 1.8' entfernt wurde. – Shubham

+0

Eine andere Option, erstellen Sie eine temporäre Datenbank, führen Sie eine Syncdb usw., dann kopieren Sie die Tabelle django_content_type in die Problemdatenbank. – PhoebeB

+0

In Django 1.8 gibt es 'django/contrib/contentypes/migrations/0002_remove_content_type_name.py'. Ich habe nicht überprüft, wann es hinzugefügt wurde. –

3

Kann seltsam aussehen, aber ich habe das behoben, indem ich auf Django Version 1.8 aktualisiert habe. Zunächst war ich ver 1.7

+0

Upgrade auf eine neuere Version hat mein Problem gelöst. Vielen Dank! –

-3

Schalten Sie den Server muss es in einem anderen Terminal geöffnet sein und versuchen zu migrieren es funktioniert!

8

In meinem Fall, was ich getan habe, um dies zu beheben, war die Aktualisierung auf eine neuere Version von Django. Wenn Sie mit Mac arbeiten gerade tun:

  1. installieren pip django --upgrade
  2. Python manage.py makemigrations
  3. Python
16

Try migrieren manage.py erste Auth Anwendung zu migrieren, und dann andere:

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

Das funktionierte wie ein Zauber. Danke Mojtaba :) – Stryker

+0

@Stryker Ich bin so froh, das zu hören :) –

+0

dies tat es für mich, danke – ministry

2

hinzufügen von @int_uaKommentarFügen Sie dies als Abhängigkeit von der fehlgeschlagenen Migration hinzu:

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

Führen Sie dann die Migration erneut aus.

0

Ich hatte zwei Systeme in Django 1.9.1 zu verschmelzen und ich konnte einfach nicht nach diesem Fehler erhalten:

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

Umfangreiche googeln und stackoverflowing fruchtlos war. Schließlich habe ich die Debug-Zeile zu

~/.virtualenvs/(venv_name) /lib/python2.7/site-packages/django/contrib/contenttypes/models hinzugefügt.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." 
     ) 

Dies sagte mir die Modellnamen, die den Fehler verursacht und letztlich zur Behebung geführt.

Ich verwende Postgres und die Sequenznummern für die Tabellen django_content_type und auth_permission zeigten nicht auf das Ende der Tabelle, wodurch Einfügevorgänge fehlschlagen.

Diese zwei Linien festgelegt, dass (auf der Grundlage dieser 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);