J'essaie de migrer de Django 1.6
à Django 1.8
. J'utilisais South
pour gérer migrations
dans Django 1.6. J'ai réussi à créer de nouveaux fichiers de migration par python manage.py makemigrations
. en courant python manage.py migrate --fake-initial
, Je reçois cette erreur
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 "
L'un des fichiers de migration 0001_initial.py
dit:
dependencies = [
('auth', '0006_require_contenttypes_0002'),
('clients', '0002_auto_20150428_1551'),
('players', '0001_initial'),
]
ce qui, je suppose, est particulièrement le problème. Quelle pourrait être la solution à ce problème. Toute aide serait appréciée.
Je pense que cela a quelque chose à voir avec "La suppression de ContentType.name
", selon this . Mais cela ne fonctionne pas.
En supprimant manuellement la colonne name
de la table 'Django_content_type'. Par exemple.
'ALTER TABLE Django_content_type DROP COLUMN name'
J'ai pu appliquer les migrations. Peut-être que cela peut vous aider un peu plus loin au moins.
Essayez de migrer d'abord l'application d'authentification, puis d'autres:
manage.py migrate auth
manage.py migrate <app_name>
Dans mon cas, ce que j'ai fait pour résoudre ce problème était la mise à jour vers une version plus récente de Django. Si vous travaillez avec Mac, faites simplement:
Cela peut sembler étrange, mais j'ai corrigé cela en passant à Django version 1.8. Au départ, j'utilisais la version 1.7
J'ai dû fusionner deux systèmes dans Django 1.9.1 et je n'ai tout simplement pas pu surmonter cette erreur:
"Error creating new content types. Please make sure contenttypes "
La recherche étendue sur Google et le débordement des piles étaient vains. Enfin, j'ai ajouté la ligne de débogage à
~/.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."
)
Cela m'a dit les noms des modèles qui causaient l'erreur et ont finalement conduit au correctif.
J'utilise Postgres et les numéros de séquence des tables Django_content_type et auth_permission ne pointaient pas vers la fin de la table, provoquant l'échec des insertions.
Ces 2 lignes ont corrigé cela (sur la base de cette 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);
Pour ajouter au commentaire de @int_ua Ajoutez ceci en tant que dépendance à la migration qui échoue:
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
]
Relancez ensuite la migration.