Решение 1:
Прямой путь - использовать подкласс OTPAuthenticationForm
для замены полей формы, используемых для otp_device
и otp_challenge
, с помощью виджета HiddenInput
.В папке вашего приложения создайте новый файл Python с именем forms.py
и добавьте следующий
from django_otp.forms import OTPAuthenticationForm
from django import forms
class SimpleOTPAuthenticationForm(OTPAuthenticationForm):
otp_device = forms.CharField(required=False, widget=forms.HiddenInput)
otp_challenge = forms.CharField(required=False, widget=forms.HiddenInput)
. В своем файле urls.py
внутри приложения добавьте import
и замените LoginView
наследующий
from .forms import SimpleOTPAuthenticationForm
path('user_login/', LoginView.as_view(template_name="accounts_app/user_login.html",
authentication_form=SimpleOTPAuthenticationForm), name='user_login'),
Решение 2:
Альтернативный вариант, но требуется больше стиля для соответствия предупреждению о форме начальной загрузки и другим функциям.Начните с использования следующих
Отображать только те поля, которые вы хотите в своем шаблоне: поскольку otp_device
и otp_challenge
не обязательны, вы можете просто пропустить их.Используйте {% bootstrap_field form.<field> %}
для каждого поля, которое вы хотите отобразить вместо {% bootstrap_form form %}
.Смотрите здесь для всех опций для настройки рендеринга каждого поля.Ошибки для каждого поля могут отображаться с помощью {{ form.errors.<field> }}
, но вы должны сами их стилизовать.
В вашем случае
{% bootstrap_field form.username %}
{% bootstrap_field form.password %}
{% bootstrap_field form.otp_token %}