私たちはDjango 1.9アプリで使用するサードパーティのlibを持っています。私たちは元のアプリケーションにないいくつかの機能(MongoDBを対象とする)でそのアプリケーションを修正したいと思います。現在のところ、元のlibのフォークを使用してこれを行いますが、最終的にアップストリームに引き込まれるように、変更を少し直交させたいと考えています。Monkeyは別のアプリにDjangoアプリをパッチします
私たちは、アプリconfig ready()
中にパッチを適用しようとしましたが、モデルの輸入がdjango.apps.registry.populate()
にこの呼び出しの前に処理され、そしてapps_ready == False
から\__init__
被るでそれを実行します。これを実行するライフサイクルの最善の部分は何ですか?
class MongoConfig(AppConfig):
def __init__(self, app_name, app_module):
super(MongoConfig, self).__init__(app_name, app_module)
for p in patches:
patch(*p)
def patch(old, new):
old_module, old_item = split_mod(old)
new_module, new_item = split_mod(new)
print('patching {0} with {1}'.format(old, new))
old_module = import_module(old_module)
new_module = import_module(new_module)
setattr(old_module, old_item, getattr(new_module, new_item))
私はパッチの両方で '__init __。実装のアプリと' AppConfig.ready'コールバックでpy'てきました。私は誰かがあなたに純粋な推測ではない答えをどのように与えることができないのか分かりません。何がうまくいくのかは、あなたの質問に与えていない詳細に依存します。 – Louis
既存のアプリケーション(django-allauth)をMongoDBで使用するように変更しています。これには、元のライブラリと直交するようにしているモデル、ビュー、およびフォームの変更が必要です。他にどんな情報がありますか? – mwjackson