グループと生徒の2つのモデルがあり、それらのグループのテーブルは1つだけです。生徒のテーブルは削除されました。
操作方法Djangoもう一度作成しますか?makemigrations
を実行すると、「変更は検出されませんでした」と出力されます。
管理者ページで、生徒のテーブルをクリックすると、例外がスローされます。
relation "students_students" does not exist
Django 1.7で試すことができます:
1. Delete your migrations folder
2. In the database: DELETE FROM Django_migrations WHERE app = 'app_name'.
You could alternatively just truncate this table.
3. python manage.py makemigrations
4. python manage.py migrate --fake
Django 1.9.5で作業している場合、これはこの問題の100%の解決策です:
1. Delete your migrations folder
2. In the database: DELETE FROM Django_migrations WHERE app = 'app_name'.
You could alternatively just truncate this table.
3. python manage.py makemigrations app_name
4. python manage.py migrate
これは100%機能します!
Django手動で削除したテーブルを再作成する簡単な方法はありません。データベースを手動で変更すると、Djangoのデータベースの(移行からの)ビューは実際とは異なります。修正するのが難しい場合があります。
sqlmigrate コマンドを実行すると、テーブルの作成に必要なSQLが表示されます。 SQLはデータベースシェルで実行できます。アプリ名がstudents
で、テーブルを作成した移行が00XX_create_students.py
、あなたはそうするでしょう:
./manage.py sqlmigrate students 00XX_create_students
学生テーブルとの間で外部キーがある場合は、制約も作成する必要があるので注意してください。
Django 2の場合、これを行います:
1. Delete your migrations folder
2. In the database: `DELETE FROM Django_migrations WHERE app = 'app_name';`
3. python manage.py makemigrations app_name
4. python manage.py migrate
5. python manage.py migrate --fake default //This was the key to solve my problem
移行アプリフォルダーから移行フォルダーを削除し、移行コマンドを実行します。
python3 manage.py makemigrations appname
python3 manage.py migrate
私のために働いた唯一の方法:
rm -r <app-name>/migrations/
python manage.py makemigrations <app-name>
python manage.py sqlmigrate <app-name> 0001_initial
出力内容をコピーします(または、実際にDBから削除したものによっては、SQLクエリの一部のみをコピーします)。
コピーしたクエリをDBに適用します。
psql -U user_name -h 127.0.0.1 database_name
SQLクエリの印刷出力からコピーしたものを貼り付けます。
クエリをコミットします。
これで完了です。欠落しているテーブルが作成されます。
削除したテーブルの名前をmodels.pyのsome_new_nameに変更して実行します。
python3 manage.py makemigration
python3 manage.py migrate
もう一度some_new_nameテーブルの名前を元の名前に変更して実行します
python3 manage.py makemigration
python3 manage.py migrate
最後に、dbshellに移動して、テーブルsome_new_nameを削除します
Django 1.10.4の場合、プロジェクトフォルダーからdb.sqlite3ファイルを削除し、次のコマンドを実行しました。
次のコマンドを実行してください:
python manage.py migrate --run-syncdb
MariaDBを使用するDjango 1.11.2、データベーステーブルの偶発的なドロップ。テーブルを再作成するには、以下を試してください。1/app/migrationsディレクトリのinit。pyを除くすべてを削除2/select * from Django_migrations; app = 'yourapp';のDjango_migrationsから削除します。 3 /モデルが適切であることを確認して実行します:python manage.py makemigrations 4/python manage.py migrate
私のために働く!
私のために働いた答えは次のとおりです:
データベースでモデルのテーブルが削除され、再作成する必要があると仮定してから、次の手順を実行します。
削除されたテーブルを作成するmodels.pyのモデルをコメントアウトします(モデルクラスまたはa = models.ManyToManyField(...)
のようなテーブルを作成する行)
実行:python manage.py makemigrations <app-name>
、 どこ <app-name>
は、models.pyがあるアプリの名前です。
実行:python manage.py migrate --fake <app-name>
models.pyでモデルのコメントを外します
実行:python manage.py makemigrations <app-name>
実行:python manage.py migrate <app-name>
(--fakeなし)
そして、あなたはテーブルがデータベースに戻っているはずです。ただし、テーブルにあったデータはすべて失われます。
私は手動でテーブルを作成し、それが役立ちます。
Migrationsフォルダーを削除し、データベース全体をドロップした後、アプリの移行を行いました
python3 manage.py makemigration
python3 manage.py migrate
そして戻ってきた。