張高モデルを別のアプリケーションに移行しましょう.
18401 ワード
リリー・プマンシステムの拡張に伴い、新しいテーブルとアプリケーションが必要です.
既存のアプリケーションを迅速に開発するために、この機会を利用して1つのアプリケーションを別のアプリケーションに集中しましょう.
考えているだけで目がくらくらしますが、幸いなことに倉庫にはこの過程を助ける機能がたくさんあります.方向性:既存のテーブルに新しいモデルを参照させます.新しいモデルを作成すると、 1.新しいモデルを作るアプリケーションから移行するモデルを削除し、新しいアプリケーションに新しいモデルを作成します.外部キー関係も変更に応じて変更されます. classes: Matching, Presession, SessionBatch, Session core: Region personnels: Staff, Counselor, counselor_available_region services: Application 移行ファイルを作成します.各モデルの名前を決定します.私の場合、db tableをmetaに設定するので、metaを参照できます. 2.既存テーブルの名前の変更の既存のアプリケーションでテーブルが削除されたため、移行ファイルには外部キー関係を削除するremovefield、モデルを削除するdeletemodel、新しいモデルを作成するCreate model、新しい外部キーを生成するalterfieldの4つの操作があります. は4つのオファーを修正する必要があります.従業員アプリケーションからモデルを削除および移動しているため、removefield、deletemodel、alterfieldは従業員の移行ファイルにあり、残りのアプリケーションではalterfieldおよびcreatemodelがほとんどです. removefield: Using Django provides a special migration operation, AlterModelTable, to rename a table for a model. Edit the migration that drops the old table, and instead rename the table to the name of the new table Next, you need to prevent Django from creating a table for the new Product model. Instead, you want it to use the table you renamed. Due to the line 注意:コードをマシンに置かないで、生成する必要がある新しいモデルも別々に処理して、ブーブー. 新しく作成されたフィールドまたはモデル一緒に作ると絡み合います 3.移行私はずっとこのような間違いをしています.
リレーションシップは既に存在します.これは、名前を持つテーブルがすでに存在することを意味します.したがって、データベースを表示すると、テーブルが生成されたことがわかります.問題は、この問題がタイムリーに発見されず、ロールバックと移行を繰り返したときにテーブルが作成されたことです.まず、データベース内の問題テーブルをバッチで削除し、移行を再開します.正常に動作します. 今回は関係ありません.この場合、テーブルは偽物ですが、他のアプリケーションのモデル名をstaffle staffsからstaffle staffsに変更する必要がありますが、この部分はできません.この移行ファイルのみを移行します. が現れたら、簡単に解決できます.対応する移行ファイルのコメントに新しい関係を定義する部分.このような状況が発生したのは、既存のテーブルにすでに関係があり、テーブル名を変更する過程で、新しく作成された障害と考えられるテーブルと新しい関係を確立しようとしたためです. まず、私が最も間違っている部分は、新しく作成したテーブルを別々に作業していないこと、新しく作成したテーブルの参照関係を個別に整理して移行していないことです.次は混同しないでください. Introspection枚のGOORMは、Pythonで作成したテーブルの内容をデータベーステーブルに翻訳し、プライマリ・キーや自動インクリメント・シーケンスなどを生成します.生成された変数には、テーブルの名前+特定の名前形式の名前があります.この場合、このロケーションで行ったようにテーブルの名前を変更すると、これらの変数の名前も変更されますか?答えは変わらない.しかし、それでも張高は関係性を見つけることができる.この文書では、データベースが提供するメタデータ・テーブルを使用して、内省と呼ばれる関係性を検索します.すなわち,ネーミング規則に依存することなくオブジェクトを処理できる. ソース:How to Move a Django Model to ANother App
既存のアプリケーションを迅速に開発するために、この機会を利用して1つのアプリケーションを別のアプリケーションに集中しましょう.
考えているだけで目がくらくらしますが、幸いなことに倉庫にはこの過程を助ける機能がたくさんあります.
AlterModelTable
という名前の移行オプションを使用して、既存のテーブルの名前を新しいモデルに変更できます.この場合、新しいモデルを使用して新しいテーブルは作成されません.SeparateDatabaseAndState
with database_operations
set to an empty list prevents Django from dropping the column. operations = [
- migrations.RemoveField(
- model_name='product',
- name='category',
+ migrations.SeparateDatabaseAndState(
+ state_operations=[
+ migrations.RemoveField(
+ model_name='product',
+ name='category',
+ ),
+ ],
+ database_operations=[],
),
]
deletemodel:operations = [
- migrations.DeleteModel(
- name='Product',
- ),
+ migrations.SeparateDatabaseAndState(
+ state_operations=[
+ migrations.DeleteModel(
+ name='Product',
+ ),
+ ],
+ database_operations=[
+ migrations.AlterModelTable(
+ name='Product',
+ table='product_product',
+ ),
+ ],
+ )
]
createmodeldatabase_operations=[]
, Django does not create the table. operations = [
- migrations.CreateModel(
- name='Product',
- fields=[
- ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(db_index=True, max_length=100)),
- ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='catalog.Category')),
- ],
+ migrations.SeparateDatabaseAndState(
+ state_operations=[
+ migrations.CreateModel(
+ name='Product',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(db_index=True, max_length=100)),
+ ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='catalog.Category')),
+ ],
+ ),
+ ],
+ # Table already exists. See catalog/migrations/0003_delete_product.py
+ database_operations=[],
),
]
alterfieldoperations = [
- migrations.AlterField(
- model_name='sale',
- name='product',
- field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='product.Product'),
- ),
+ migrations.SeparateDatabaseAndState(
+ state_operations=[
+ migrations.AlterField(
+ model_name='sale',
+ name='product',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='product.Product'),
+ ),
+ ],
+ # You're reusing an existing table, so do nothing
+ database_operations=[],
+ )
]
Reference
この問題について(張高モデルを別のアプリケーションに移行しましょう.), 我々は、より多くの情報をここで見つけました https://velog.io/@sylee0427/장고-모델을-다른-앱으로-옮겨보자テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol