Расширение django-invitations + адаптер учетных записей django-allauth
Я использую django-allauth и django-invitations. Следуя документации django-allauth, я создал пользовательский адаптер, чтобы я мог переопределить метод get_signup_redirect_url
from allauth.account.adapter import DefaultAccountAdapter
class MyAccountAdapter(DefaultAccountAdapter):
def get_login_redirect_url(self, request):
# custom redirects here
А затем в моем файле настроек у меня есть
ACCOUNT_ADAPTER = 'accounts.adapter.MyAccountAdapter'
Я также использую django-invitations, в документации которого сказано, что для интеграции с allauth мне нужно установить
ACCOUNT_ADAPTER = 'invitations.models.InvitationsAdapter'
Это, очевидно, вызывает проблему, потому что тогда я больше не использую свой пользовательский адаптер.
Как я могу интегрировать django-allauth и django-invitations, переопределив при этом метод адаптера get_login_redirect_url
?
Вот как я решил эту проблему в django-invitations v1.9. Надеюсь, это не будет актуально в ближайшем будущем.
В моем проекте есть приложение "accounts", в котором я размещаю все файлы, связанные с учетными записями. В __init__.py
для приложения я поместил следующий восхитительный обезьяний патч 🙉
from invitations import adapters
def new_get_invitations_adapter():
from allauth.account.adapter import get_adapter
return get_adapter()
adapters.get_invitations_adapter = new_get_invitations_adapter
Он просто обходит логику django-invitations, которая определяет, какой адаптер использовать, всегда возвращая тот, который будет использовать django-allauth. А django-allauth возвращает пользовательский, который я указал в проекте settings.py
.
ACCOUNT_ADAPTER = 'accounts.adapters.MyAccountAdapter'