Python Django:重写AuthenticationForm的表单字段是否正确?

Python Django:重写AuthenticationForm的表单字段是否正确?,python,django,Python,Django,我发现使用身份验证表很方便 但是由于我们客户机的用户名有点长,而且我们客户机的数量不多,所以我们希望在登录页面中使用select小部件。所以我使用下面的代码来实现它它可以工作 from django.contrib.auth.forms import AuthenticationForm class SignInForm(AuthenticationForm): username = forms.ModelChoiceField(queryset=User.objects.all())

我发现使用身份验证表很方便 但是由于我们客户机的用户名有点长,而且我们客户机的数量不多,所以我们希望在登录页面中使用select小部件。所以我使用下面的代码来实现它它可以工作

from django.contrib.auth.forms import AuthenticationForm

class SignInForm(AuthenticationForm):
    username = forms.ModelChoiceField(queryset=User.objects.all())
在views.py中:

def post(self, request):
    form = SignInForm(data=request.POST)
    if form.is_valid():
        login(request, form.get_user())
        return HttpResponseRedirect(reverse('account:signin'))
    return render(request, 'account/sign-in.html', {'form': form})
然而,我在文档中找不到任何类似的用法。所以我不确定这样做是否正确

我不知道它是否与ModelForm相似:

我想知道这里发生了什么。我在SignInfo中声明的用户名是否会阻止AuthenticationForm生成其类似ModelForm的用户名?但是AuthenticationForm成功地处理了我声明的用户名,就像它应该生成的用户名一样

看起来不错

定义的
用户名
密码
字段。您的子类像往常一样覆盖了
username
字段

所有表单字段实际上都是Python描述符协议的实现。他们只是普通班的成员