5

プラグインを使用して django サイトを作成しています。各プラグインは、メインのプラグイン (または他のプラグイン) に依存する単純な django アプリです。

アプリケーション/プラグイン間の依存関係は私には明らかですが、メインのアプリがプラグインに依存することを避けるために、モンキー パッチを介して (プラグイン固有のモデルへの外部キーとして) 列を追加することは許容できるはずです。

メイン アプリケーションには既に南の管理があり、すべてのプラグインがあるため、これらのモジュールの設定で移行ディレクトリを変更できません。

では、他のサウス アプリケーションからサウス アプリケーション モデルにモンキー パッチを適用するにはどうすればよいでしょうか。

ps: 私はフランス人です。間違いを見つけたら、気軽に質問を修正してください。不明な点がある場合は、質問してください。

編集:djangoの移行で現在どのように行っているかについての回答を追加しました。

4

3 に答える 3

1

django 1.7 と django の移行に移行したときに新しい回答を投稿しましたが、解決策は明らかではありませんでした。リモート テーブルに外部キーを追加するには、独自の移行クラスを作成する必要がありました。

from django.db.migrations import AddField

class AddRemoteField(AddField):
    def __init__(self, remote_app, *args, **kwargs):
        super(AddRemoteField, self).__init__(*args, **kwargs)
        self.remote_app = remote_app

    def state_forwards(self, app_label, *args, **kwargs):
        super(AddRemoteField, self).state_forwards(self.remote_app, *args, **kwargs)

    def database_forwards(self, app_label, *args, **kwargs):
        super(AddRemoteField, self).database_forwards(
            self.remote_app, *args, **kwargs)

    def database_backwards(self, app_label, *args, **kwargs):
        super(AddRemoteField, self).database_backwards(
            self.remote_app, *args, **kwargs)

次に、移行ファイルを作成します。

from __future__ import unicode_literals

from django.db import models, migrations
from my_app.tools import AddRemoteField
from my_app.models import Client


class Migration(migrations.Migration):

    dependencies = [
        ('anikit', '0002_manual_user_migration'),
    ]

    operations = [
        AddRemoteField(
            remote_app='auth',
            model_name='user',
            name='client',
            field=models.ForeignKey(Client, verbose_name='client',
                                    null=True, blank=True),
            preserve_default=True,
        ),
    ]
于 2014-11-26T23:20:42.110 に答える