Расширение 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'
Вернуться на верх