Я нашел отличный пакет, который интегрирует Django с AJAX-управляемыми формами в моделях Bootstrap 4, но я изо всех сил пытаюсь заставить его работать с allauth.
В одном примере из документации по модальному пакету используется форма регистрации по умолчанию в django, которую вы можете увидеть в демонстрационной версии здесь: https://github.com/trco/django-bootstrap-modal-forms
Я попытался скопировать пример регистрации пакета, заменив форму регистрации по умолчанию формой регистрации Аллаута, но безуспешно.
Я думал, что проблема должна быть частично, потому что форма регистрации по умолчанию - это ModelForm, а у Аллаута - нет.
Итак, я попытался превратить форму регистрации Аллаута в django в ModelForm и выяснить, есть ли способ переопределить метод сохранения формы регистрации Аллаута, но, опять же, не повезло.
Вот часть моего кода, а также mixin пакета и метод сохранения формы регистрации allauth - есть идеи, как можно было бы интегрировать allauth с этим пакетом, если вообще?
forms.py
from bootstrap_modal_forms.mixins import PopRequestMixin, CreateUpdateAjaxMixin
from allauth.account.forms import SignupForm
class CustomSignupForm(PopRequestMixin, CreateUpdateAjaxMixin, SignupForm, forms.ModelForm):
class Meta:
model = CustomUser
fields = ('username', 'email')
views.py
from bootstrap_modal_forms.generic import BSModalCreateView
class signup(BSModalCreateView):
form_class = CustomSignupForm
template_name = 'users/signup2.html'
success_message = 'Success: Sign up succeeded. You can now Log in.'
success_url = reverse_lazy('test')
модальные пакеты mixins
class CreateUpdateAjaxMixin(object):
"""
Mixin which passes or saves object based on request type.
"""
def save(self, commit=True):
if not self.request.is_ajax():
instance = super(CreateUpdateAjaxMixin, self).save(commit=commit)
else:
instance = super(CreateUpdateAjaxMixin, self).save(commit=False)
return instance
Алгоритм сохранения метода регистрации
def save(self, request):
adapter = get_adapter(request)
user = adapter.new_user(request)
adapter.save_user(request, user, self)
self.custom_signup(request, user)
# TODO: Move into adapter `save_user` ?
setup_user_email(request, user, [])
return user