У нас есть сторонняя библиотека, которую мы используем в нашем приложении Django 1.9. Мы хотели бы внести изменения в это приложение с некоторой функциональностью, не входящей в исходное приложение (с таргетингом на MongoDB). В настоящее время мы делаем это через нашу собственную вилку исходного lib, но хотели бы сделать изменения немного более ортогональными, чтобы в конечном итоге их можно было вытащить вверх по течению.
Мы пытались выполнить паттинг во время приложения config ready()
, но импорт модели обрабатывается перед этим вызовом в django.apps.registry.populate()
, а его выполнение в \__init__
страдает от apps_ready == False
. Какая лучшая часть жизненного цикла для этого?
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))