web-dev-qa-db-ja.com

Django 1.8およびsyncdb / migrateを伴うauth_userエラー

Django 1.8(zc.buildoutを使用))にアップグレードしてsyncdbまたはmigrateを実行すると、次のメッセージが表示されます。

Django.db.utils.ProgrammingError: relation "auth_user" does not exist

私のモデルの1つにはDjango.contrib.auth.models.Userが含まれています。

user = models.ForeignKey(
    User, related_name='%(app_label)s_%(class)s_user',
    blank=True, null=True, editable=False
)

Django 1.7にダウングレードするとエラーが削除されます。UserオブジェクトをDjango 1.8?

46
mpso

最初にauthを実行し、次に残りの移行を実行して、これを修正します。

python manage.py migrate auth
python manage.py migrate
96
Dave Lawrence

私の環境では、Django.contrib.auth.modelsと関係があるすべてのアプリで実行中のmakemigrationsを修正します。

 manage.py makemigrations app_with_user_relation 
 manage.py migrate 
18
Pedro Vagner

私もこれらを使用して解決した同じ問題がありました:

python manage.py migrate auth
python manage.py migrate

その後、移行はその仕事をします

17
Jastatham

この問題は、まだ移行されていないすべてのアプリ、つまり、移行ディレクトリに「initial_0001.py」ファイルをまだ持っていないアプリに対して「makemigrations」を実行することで発生します。

これは、これらのアプリのそれぞれに対して実行することにより行われます(この場合、メイクファイルを使用します)。

manage.py makemigrations app_name

それが完了すると、次を実行できます。

manage.py migrate

いつものように。

この根本的な原因は、何らかの理由でです

manage.py makemigrations

notこれらの初期移行がまだ存在しない場合は、常に作成します。そして、それは前述のエラーにつながります。

それどころか、

manage.py makemigrations app_name

does常に作成します(まだない場合)。残念ながら、この非対称性の理由を推測することはできません。

8
Ytsen de Boer

私が実行されたようにherokuを使用している場合

heroku run python manage.py makemigrations

これにより、現在変更があることを示すメッセージが表示される可能性があります。それを無視して実行する

heroku run python manage.py migrate

これにより、何らかの処理が行われたことを示す出力が得られます。最後に実行

heroku run python manage.py createsuperuser
7
Aaron F

ここでこの問題を解決するために私がやったことです:

1)プロジェクト内のOneToOneField、ForeignKey、ManyToManyFieldsなどのすべての外部キー関係フィールドを検索します。これには、auth.Userを参照している再利用可能なアプリも含まれます。最低限の使用:

'auth.User'

2)上記のすべてのモデルについて、モデルに有効なDjango移行(南ではない)があることを確認します。南への移行がある場合は、ディレクトリの名前をmigrations_southに変更してからmakemigrationsを実行しますそのアプリのコマンド:

./manage.py makemigrations affected_app

時々、デフォルトのmigrationsディレクトリではなく、別の名前でDjango migrationsフォルダーがあります。そのような場合、settings.pyでMIGRATION_MODULESを介してこれを参照します。

MIGRATION_MODULES = {'filer': 'filer.migrations_Django'}

大規模なプロジェクトでは問題を見つけるのが困難だったので、settings.pyのINSTALLED_APPSにあるすべてのカスタムアプリをコメントアウトし、移行を実行してデータベースを再作成しようとするため、テストコマンドを実行しました。

./manage.py test

それは私のためにそれを修正したように見えます。ステップ1が必須なのか、ベストプラクティスなのかはわかりません。ただし、アプリを移行に変換する必要があります。

乾杯!

PS。今後の予定に備えてください Django 1.9 。 syncdbコマンドは削除されます。移行せずにアプリを同期する従来の方法は削除され、移行はすべてのアプリに必須です。

4
radtek

古いDjango 1.6プロジェクトをDjango 1.8に移行しました。以前はsyncdbを使用してデータベースを移行しましたが、これを行いましたプロジェクト内のすべてのアプリの初期移行手順はありません。Django 1.8では、データベースの移行が必要です。

manage.py makemigrations <app_name>

プロジェクトのすべてのアプリで問題が解決しました。

0

これを使用してユーザーを参照してみてください

from Django.conf import settings
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='%(app_label)s_%(class)s_user', blank=True, null=True, editable=False)
0
Rod Xavier

たぶん答えを見つけて問題を解決したかもしれませんが、私の場合は、データベースを削除し、ユーザーの完全な権限でデータベースを再作成することで上記の問題が解決されたことを指摘したいと思います。非実稼働環境で作業しているため、これを行うことができましたが、ステージング環境でこれを行うことは良い考えではないため、注意してください。

python 2.7.12を使用しており、次は私のvirtualenvの仕様です。

Django==1.10.5
Django-crispy-forms==1.6.1
Django-registration-redux==1.4
djangorestframework==3.5.3
olefile==0.44
packaging==16.8
Pillow==4.0.0
psycopg2==2.6.2
0