Django 1.8: 既存スキーマの初期マイグレーションを作成する
質問
django 1.8 プロジェクトを開始しました。このプロジェクトでは migrations システムを使用しています。
どういうわけか、途中で物事が面倒になったので、私は DB から migrations フォルダとテーブルを消去し、そして今、それらを再構築しようとしていますが、成功しません。
私は 3 つのアプリ (3
models.py
ファイル) があり、モデルにはテーブルが正確に反映されています!
今まで見つけた中で一番良い方法は
-
すべてを消去する
migrations
フォルダーを削除します。完了! -
からすべてを削除します。
django_migrations
テーブルを削除します。完了! -
実行する
python manage.py makemigrations --empty <app>
をすべてのアプリに対して実行します。完了! -
実行
python manage.py migrate --fake
. 完了しました。(ただし、すべてのmakemigrations
コマンドの後に実行した場合のみ動作します。
ここで、新しいフィールドを追加して
makemigrations
コマンドを実行すると、次のようなエラーが表示されます。
django.db.utils.OperationalError: (1054, "Unknown column 'accounts_plan.max_item_size' in 'field list'")
私はこのことに何時間も費やしてきました。 毎回マイグレーションを中断することなく作業を続けられるように、マイグレーションを初期化するには一体どうしたらいいのでしょうか?
なぜこんなに複雑なのでしょうか?なぜシンプルなワンライナーがないのでしょう。
initiate_migrations_from_schema
?
EDITです。
これでさらに厄介なことになりました。私が切り捨てたのは
django_migrations
テーブルを切り捨て、すべての
migrations
フォルダーを削除しました。
ここで、私は実行しようとする
python manage.py migrate --fake-initial
(DEV docs で見つけたもの) を実行してみると、Django のすべての「内部」アプリ (認証、セッションなど) をセットアップするようになりますが、こうなります。
(1054, "Unknown column 'name' in 'django_content_type'")
.
さて、このquot;column"は本当のcolumnではありません。これは
@property
で定義されたもので、Django の
contenttypes
のアプリになります。はどうなっているのでしょう?なぜ
name
プロパティを実際のカラムとして識別しているのでしょうか?
どのように解決するには?
ようやく、原因はわからないが、動くようになったので、今後に期待したい。
何度も試行錯誤を繰り返し、Djangoの開発サイト(
リンク
).
以下はその手順です(この問題に遭遇した人のために)。
-
を空にします。
django_migrations
テーブルをdelete from django_migrations;
-
すべてのアプリについて、その
migrations
フォルダーを削除します。rm -rf <app>/migrations/
-
"組み込み"アプリのマイグレーションをリセットします。
python manage.py migrate --fake
-
各アプリの実行に対して
python manage.py makemigrations <app>
. 依存関係に注意する(ForeignKeyを持つモデルは親モデルの後に実行されるべき)。 -
最後に
python manage.py migrate --fake-initial
その後、最後のコマンドを実行すると
--fake-initial
フラグなしで実行しました。
これですべてがうまくいき、マイグレーションシステムを普通に使うことができるようになりました。
この問題に遭遇しているのは私だけではないでしょう。よりよく文書化され、さらに単純化される必要があります。
Django 1.9 ユーザのためのアップデートです。
Django 1.9.4 で再びこのシナリオを実行したところ、ステップ 5 が失敗しました。
私がしなければならなかったのは
--fake-initial
を
--fake
を追加することで動作させることができます。
関連
-
Djangoキャッシュの説明
-
[解決済み] QuerySetで空白またはNULLの名前をフィルタリングする方法は?
-
[解決済み] Django のクエリで OR フィルタを行うにはどうすればよいですか?
-
[解決済み] Django で null を許容するユニークなフィールド
-
[解決済み] Djangoのvalues()の項目名を変更する方法は?
-
[解決済み] egg_infoエラーでpipからインストールできない
-
[解決済み] Django モデルで外部キーフィールドをオプションにすることはできますか?
-
[解決済み] Djangoで複数のfilter()を連鎖させる、これはバグ?
-
[解決済み] Django admin: データベースフィールドを持たないカスタム list_display フィールドの1つでソートする方法
-
Django 1.7 で migrations をリセットする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
6.5、Django - モデルでJSONFieldを使用してJSONフィールドでMySQLテーブルを作成する
-
[解決済み] django の OneToOneField と ForeignKey の違いは何ですか?
-
[解決済み] django-rest-framework の管理者スタイルのブラウズ可能なインターフェイスを無効にする方法は?
-
[解決済み] Django REST フレームワーク: 非モデルシリアライザー
-
[解決済み] Django ManyToMany filter()
-
[解決済み] Django で現在ログインしているユーザのユーザ ID を取得する方法は?
-
[解決済み] django で複数のオブジェクトを削除する
-
[解決済み] Django Forms: 有効でない場合、エラーメッセージとともにフォームを表示する
-
[解決済み] Django admin: データベースフィールドを持たないカスタム list_display フィールドの1つでソートする方法
-
[解決済み] Djangoテンプレートでネストされたforループで一番外側のforloop.counterにアクセスする方法は?