[解決済み] あるdjangoアプリから新しいアプリにモデルを移行するにはどうしたらいいですか?
2022-07-18 16:19:05
質問
私は、4つのモデルを含むdjangoアプリを持っています。これらのモデルの1つは、別のアプリにあるべきであることに今気づきました。私は移行のために南をインストールしましたが、私はこれが自動的に処理できるものではないと思います。どのようにすれば、古いアプリから新しいアプリにモデルの1つを移行することができますか?
また、本番システムなどを移行できるように、これが反復可能なプロセスであることが必要であることを心に留めておいてください。
どのように解決するのですか?
南を使用して移行する方法。
共通と特定の2つのアプリがあるとします。
myproject/
|-- common
| |-- migrations
| | |-- 0001_initial.py
| | `-- 0002_create_cat.py
| `-- models.py
`-- specific
|-- migrations
| |-- 0001_initial.py
| `-- 0002_create_dog.py
`-- models.py
ここで、モデル common.models.cat を特定のアプリに(正確には specific.models.cat に)移動させたいと思います。 まず、ソースコードに変更を加えてから実行します。
$ python manage.py schemamigration specific create_cat --auto
+ Added model 'specific.cat'
$ python manage.py schemamigration common drop_cat --auto
- Deleted model 'common.cat'
myproject/
|-- common
| |-- migrations
| | |-- 0001_initial.py
| | |-- 0002_create_cat.py
| | `-- 0003_drop_cat.py
| `-- models.py
`-- specific
|-- migrations
| |-- 0001_initial.py
| |-- 0002_create_dog.py
| `-- 0003_create_cat.py
`-- models.py
ここで、両方のマイグレーションファイルを編集する必要があります。
#0003_create_cat: replace existing forward and backward code
#to use just one sentence:
def forwards(self, orm):
db.rename_table('common_cat', 'specific_cat')
if not db.dry_run:
# For permissions to work properly after migrating
orm['contenttypes.contenttype'].objects.filter(
app_label='common',
model='cat',
).update(app_label='specific')
def backwards(self, orm):
db.rename_table('specific_cat', 'common_cat')
if not db.dry_run:
# For permissions to work properly after migrating
orm['contenttypes.contenttype'].objects.filter(
app_label='specific',
model='cat',
).update(app_label='common')
#0003_drop_cat:replace existing forward and backward code
#to use just one sentence; add dependency:
depends_on = (
('specific', '0003_create_cat'),
)
def forwards(self, orm):
pass
def backwards(self, orm):
pass
これで両方のアプリのマイグレーションが変更を認識し、人生の苦しみが少し軽減されました :-) このようにマイグレーション間の関係を設定することが成功の鍵です。 今、あなたがそうするなら。
python manage.py migrate common
> specific: 0003_create_cat
> common: 0003_drop_cat
は両方のマイグレーションを行い
python manage.py migrate specific 0002_create_dog
< common: 0003_drop_cat
< specific: 0003_create_cat
は下へ下へと移行します。
スキーマのアップグレードには共通アプリを使い、ダウングレードには特定アプリを使ったことに注意してください。これは、ここでの依存関係がどのように機能するかによるものです。
関連
-
AttributeError: 'str' オブジェクトには 'decode' という属性がありません。
-
[解決済み] Django テンプレート内で現在の URL を取得する方法は?
-
[解決済み】djangoのビジネスロジックとデータアクセスの分離
-
[解決済み] Django の修正 管理者の複数形
-
[解決済み] Django Southを使用して移行履歴をリセットするための推奨される方法は何ですか?
-
[解決済み] Djangoのvalues()の項目名を変更する方法は?
-
[解決済み] django のクラスベースのビューで permission_required デコレータを使用する方法
-
[解決済み] Djangoのクッキー、どうすれば設定できますか?
-
[解決済み] Django Forms: 有効でない場合、エラーメッセージとともにフォームを表示する
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Djangoの基本(16)。テンプレートタグの紹介とそのカスタマイズ方法
-
AttributeError: 'str' オブジェクトには 'decode' という属性がありません。
-
django store to databaseは現地時間より8時間短い?(2021-05-12更新)
-
[解決済み] Djangoでファイルをアップロードする方法は?[クローズド]。
-
[解決済み】Djangoアプリの名前を変更する方法は?
-
[解決済み] Django-Rest-Framework のシリアライザーで Request.User を取得する方法とは?
-
[解決済み] DjangoのRest Frameworkはcsrfを削除します。
-
[解決済み] 2つのDjangoアプリ間でモデルを移動させる方法 (Django 1.7)
-
[解決済み] Django: Django のアプリを完全にアンインストールするには?
-
[解決済み] ブロック %} に上書きではなく、追加することはできますか?