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?
最初にauthを実行し、次に残りの移行を実行して、これを修正します。
python manage.py migrate auth
python manage.py migrate
私の環境では、Django.contrib.auth.models
と関係があるすべてのアプリで実行中のmakemigrations
を修正します。
manage.py makemigrations app_with_user_relation manage.py migrate
私もこれらを使用して解決した同じ問題がありました:
python manage.py migrate auth
python manage.py migrate
その後、移行はその仕事をします
この問題は、まだ移行されていないすべてのアプリ、つまり、移行ディレクトリに「initial_0001.py」ファイルをまだ持っていないアプリに対して「makemigrations」を実行することで発生します。
これは、これらのアプリのそれぞれに対して実行することにより行われます(この場合、メイクファイルを使用します)。
manage.py makemigrations app_name
それが完了すると、次を実行できます。
manage.py migrate
いつものように。
この根本的な原因は、何らかの理由でです
manage.py makemigrations
notこれらの初期移行がまだ存在しない場合は、常に作成します。そして、それは前述のエラーにつながります。
それどころか、
manage.py makemigrations app_name
does常に作成します(まだない場合)。残念ながら、この非対称性の理由を推測することはできません。
私が実行されたようにherokuを使用している場合
heroku run python manage.py makemigrations
これにより、現在変更があることを示すメッセージが表示される可能性があります。それを無視して実行する
heroku run python manage.py migrate
これにより、何らかの処理が行われたことを示す出力が得られます。最後に実行
heroku run python manage.py createsuperuser
ここでこの問題を解決するために私がやったことです:
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コマンドは削除されます。移行せずにアプリを同期する従来の方法は削除され、移行はすべてのアプリに必須です。
古いDjango 1.6プロジェクトをDjango 1.8に移行しました。以前はsyncdbを使用してデータベースを移行しましたが、これを行いましたプロジェクト内のすべてのアプリの初期移行手順はありません。Django 1.8では、データベースの移行が必要です。
manage.py makemigrations <app_name>
プロジェクトのすべてのアプリで問題が解決しました。
これを使用してユーザーを参照してみてください
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)
たぶん答えを見つけて問題を解決したかもしれませんが、私の場合は、データベースを削除し、ユーザーの完全な権限でデータベースを再作成することで上記の問題が解決されたことを指摘したいと思います。非実稼働環境で作業しているため、これを行うことができましたが、ステージング環境でこれを行うことは良い考えではないため、注意してください。
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