web-dev-qa-db-ja.com

新しいコンテンツタイプの作成中にエラーが発生しました。アプリを個別に移行する前に、contenttypesが移行されていることを確認してください

Django 1.6からDjango 1.8に移行しようとしています。 Django 1.6。でSouthを管理するためにmigrationsを使用していました。python manage.py makemigrationsを実行中にpython manage.py migrate --fake-initialによって新しい移行ファイルを正常に作成しました。 _、このエラーが発生しています

 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 "

移行ファイルの1つ0001_initial.pyのコメント:

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

これが特に問題だと思います。この問題の回避策は何でしょうか。任意の助けをいただければ幸いです。

35
Shubham

これは、「ContentType.name "、 this によると。しかし、どういうわけか機能しません。

'Django_content_type'テーブルから列nameを手動で削除します。例えば。

'ALTER TABLE Django_content_type DROP COLUMN name'

移行を適用できました。少なくともこれでもう少し先に行くことができるかもしれません。

44
Gelbander

最初に認証アプリケーションを移行してから、他のアプリケーションを移行してください。

manage.py migrate auth
manage.py migrate <app_name>
17
Mojtaba Yousefi

私の場合、これを修正するためにしたことは、Djangoの新しいバージョンに更新することでした。 Macで作業する場合は、以下を実行してください。

  1. pip install Django --upgrade
  2. python manage.py makemigrations
  3. python manage.py migrate
7
Taciana Cruz

奇妙に見えるかもしれませんが、Djangoバージョン1.8にアップグレードすることでこれを修正しました。最初はバージョン1.7を使用していました

3
Atul gupta

Django 1.9.1で2つのシステムをマージする必要があり、このエラーを通過できませんでした。

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

大規模なグーグルとスタックオーバーフローは無益でした。最後に、デバッグ行を追加しました

〜/ .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."
        )

これにより、エラーの原因となったモデル名がわかり、最終的に修正につながりました。

Postgresを使用していますが、テーブルDjango_content_typeとauth_permissionのシーケンス番号がテーブルの最後を指していないため、挿入が失敗しました。

これらの2行で修正されました(これに基づいて 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);
2
MIkee

@int_uaによるコメントに追加するにはこれを、失敗している移行への依存関係として追加します。

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

その後、移行を再度実行します。

2
Ed J