Django 1.7 の Django アプリ間でモデルを移行するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-04 22:27:02
オリジナル
513 人が閲覧しました

How to Migrate Models Between Django Apps in Django 1.7?

Django 1.7 の Django アプリ間でモデルを移行するための実践ガイド

背景

Django 開発者が進歩するにつれて、プロジェクト構造を改善するためにリファクタリングが必要になることがよくあります。組織性と保守性。これには、より適切にカプセル化するためにモデルを独自の個別のアプリに移動することが含まれます。ただし、Django の以前のバージョンでは、外部キーの処理に問題があるため、このプロセスは困難になる可能性があります。

Django 1.7 以降のソリューション

Django 1.7 での移行の導入により、モデルの移行が行われます。アプリ間の管理がより容易になりました。 SeparateDatabaseAndState オペレーションを使用すると、複数のアプリでモデル テーブルの状態を更新しながら、同時にモデル テーブルの名前を変更できます。

ステップバイステップの手順

古いアプリからのモデルの削除

  1. 古いアプリの空の移行を作成します:
<code class="python">python manage.py makemigrations old_app --empty</code>
ログイン後にコピー
  1. 移行ファイルで、RenameTable、DeleteModel、および SeparateDatabaseAndState オペレーションを定義します:
<code class="python">class Migration(migrations.Migration):

    dependencies = []

    database_operations = [
        migrations.RenameModel('TheModel', 'newapp_themodel')
    ]

    state_operations = [
        migrations.DeleteModel('TheModel')
    ]

    operations = [
        migrations.SeparateDatabaseAndState(
            database_operations=database_operations,
            state_operations=state_operations)
    ]</code>
ログイン後にコピー

新しいアプリへのモデルの追加

  1. モデルを新しいアプリの model.py にコピーします。
  2. 新しいアプリに対して makemigrations コマンドを実行します:
<code class="python">python manage.py makemigrations new_app</code>
ログイン後にコピー
  1. 移行ファイルで、テーブルの再作成を防ぐために CreateModel オペレーションを SeparateDatabaseAndState オペレーション内にラップします。
<code class="python">class Migration(migrations.Migration):

    dependencies = [
        ('old_app', 'above_migration')
    ]

    state_operations = [
        migrations.CreateModel(
            name='TheModel',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
            ],
            options={
                'db_table': 'newapp_themodel',
            },
            bases=(models.Model,),
        )
    ]

    operations = [
        migrations.SeparateDatabaseAndState(state_operations=state_operations)
    ]</code>
ログイン後にコピー

次の手順に従うと、正常に移行できます。 Django 1.7 以降のアプリ間のモデルを統合し、クリーンで保守可能なプロジェクト構造を保証します。

以上がDjango 1.7 の Django アプリ間でモデルを移行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート