AJAX-управляемые формы в модальностях Bootstrap и Django Allauth - PullRequest
0 голосов
/ 02 мая 2019

Я нашел отличный пакет, который интегрирует 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...