【发布时间】:2021-09-01 02:24:06
【问题描述】:
我对 django 比较陌生,想自定义 AuthenticationForm 但不知道该怎么做。我本质上想覆盖 init 函数,以便能够注入属性并控制表单上显示的内容。具体来说,我想为我的登录表单添加这个:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['username'].widget = forms.widgets.TextInput(attrs={
'class': 'form-control'
})
self.fields['password1'].widget = forms.widgets.PasswordInput(attrs={
'class': 'form-control'
})
我的问题是,在创建登录视图/表单时,我让 django 为我完成所有工作,因此我不确定如何自定义它。阅读文档时,LoginView 使用默认的 AuthenticationForm。
非常感谢任何帮助!
编辑:想出来以防其他人从 Google 阅读此内容
urls.py 用于我的项目(添加了 accounts/login/ 和 2 个导入)-
from django.contrib.auth.views import LoginView
from blog.forms import MyAuthenticationForm
path('accounts/login/', LoginView.as_view(authentication_form=MyAuthenticationForm)),
path('accounts/', include('django.contrib.auth.urls'))
然后我创建了自己的表单,但像这样扩展了 AuthenticationForm:
class MyAuthenticationForm(AuthenticationForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['username'].widget = forms.widgets.TextInput(attrs={
'class': 'form-control'
})
self.fields['password'].widget = forms.widgets.PasswordInput(attrs={
'class': 'form-control'
})
现在一切正常!
【问题讨论】:
标签: python django django-widget