У нас есть сторонняя библиотека, которую мы используем в нашем приложении Django 1.9. Мы хотели бы дополнить это приложение некоторыми функциональными возможностями, которых нет в исходном приложении (нацелено на MongoDB). В настоящее время мы делаем это через наш собственный форк исходной библиотеки, но хотели бы сделать изменения немного более ортогональными, чтобы они могли в конечном итоге быть перенесены вверх по течению.
Мы пробовали вносить исправления во время приложения 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))