Почему мой Django CreateView не распознает form_valid

#django #django-allauth

#django #django-allauth

Вопрос:

Я использую модуль django allauth для создания пользователя. В views, py я создаю подкласс CreateView, но я не могу заставить form_valid работать. Кажется, он не вызывается (я не импортировал HttpResponseRedirect, но он не жалуется

 class SignupPageView(generic.CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'registration/signup.html'

    def form_valid(self, form):
        print('form_valid')
        return HttpResponseRedirect(self.get_success_url())


    def form_invalid(self, form):
        print('form_invalid') 
        return HttpResponseRedirect(self.get_success_url())
 

Что я делаю не так?

Редактировать

Я также добавил form_invalid, и он по-прежнему не работает. Это наводит меня на мысль, что что-то фундаментальное не так.

Процесс регистрации пользователя, похоже, работает правильно, и об ошибках не сообщается

HTML, связанный с формой

 {% extends '_base.html' %}
{% load crispy_forms_tags %}

{% block title %}Sign Up{% endblock title %}
{% block content %}
    <h2>Sign Up</h2>
    <form method="post">
        {% csrf_token %}
        {{ form | crispy }}
        <button type="submit">Sign Up</button>
    </form>
{% endblock content %}
 

urls.py

 urlpatterns = [
    path('signup/', SignupPageView.as_view(), name='signup'),
]
 

Комментарии:

1. Допустима ли форма?

2. Поместите оператор печати внутри form_invalid() и повторите попытку. Вероятно, ваша форма недействительна, и, следовательно, выполнение не достигает form_valid() метода.

3. Проблема может быть в ваших шаблонах URL или шаблоне.

Ответ №1:

CreateView наследует методы FormMixin, которые имеют оба form_valid и form_invalid . Так что в вашем объявлении CBV нет ничего плохого.

Поэтому я думаю, что ваша форма просто недействительна. Не могли бы вы попробовать добавить form_invalid метод и посмотреть, будет ли он вызван?

Комментарии:

1. form_invalid также не вызывается

2. Не могли бы вы обновить свой вопрос, чтобы показать шаблон URL, используемый для вызова этого представления?

3. Я добавил html и urls.py

4. Что вы видите при входе /signup на страницу?

5. форма с 4 полями: адрес электронной почты, имя пользователя, пароль1, пароль2. Форма работает должным образом: правильные проверки, пользователь создан и отправлено электронное письмо