Как изменить url формы Allauth AddEmailForm?
У меня есть страница UserDetail, которая содержит несколько форм.
from allauth.account.forms import ChangePasswordForm, AddEmailForm
User = get_user_model()
class UserDetailView(LoginRequiredMixin, DetailView):
model = User
slug_field = "username"
slug_url_kwarg = "username"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# context["form_info_username"] =
context["form_add_mail"] = AddEmailForm(user=self.request.user)
context["form_change_password"] = ChangePasswordForm(user=self.request.user)
return context
Когда я добавляю новое сообщение электронной почты:
<form method="post" action="{% url 'account_email' %}" class="add_email mt-2">
{% csrf_token %}
{{ form_add_mail|crispy }}
<div class="flex justify-end mt-2">
<button type="submit"
name="action_add"
class="bg-green-600 hover:bg-green-800 dark:bg-green-600 dark:hover:bg-green-800 font-semibold text-white rounded-sm p-2 text-xs sm:text-sm sm:px-8 ">
{% translate "Add E-mail" %}
</button>
</div>
</form>
Форма/view({% url 'account_email' %}
) перенаправляет на http://localhost:8000/de/accounts/email/, но я бы предпочел, чтобы она перенаправляла на ту же страницу, где я отправил заявку.
Я сам это исправил.
Я создал пользовательское представление электронной почты, которое наследуется от allauth, где я перезаписал success_url.
from allauth.account.views import EmailView
class CustomEmailView(EmailView):
def get_success_url(self):
return reverse('users:detail', kwargs={'username': self.request.user.username})
Затем я добавил это представление в свое приложение urls.py
:
app_name = "users"
urlpatterns = [
path('accounts/email/', CustomEmailView.as_view(), name='account_email')]
И изменил URL-адрес в форме на users:account_email
:
<form method="post" action="{% url 'users:account_email' %}"
class="add_email mt-2">
{% csrf_token %}
{{ form_add_mail|crispy }}
<div class="flex justify-end mt-2">
<button type="submit"
name="action_add"
class="bg-green-600 hover:bg-green-800 dark:bg-green-600 dark:hover:bg-green-800 font-semibold text-white rounded-sm p-2 text-xs sm:text-sm sm:px-8 ">
{% translate "Add E-mail" %}
</button>
</div>
</form>