Python Django中注册表格式不正确
现在,我正在Django做登记表。在我的注册表中,共有六个字段,如用户名、名字、姓氏、电子邮件、密码、密码确认。在我测试注册表的过程中,我发现了一件很奇怪的事情。每次字段改变位置时。我的意思是有时密码在第一位,姓氏在最后一位。每当我关闭服务器并再次运行它时,字段位置就会再次改变 请参见下面的一些屏幕截图。所以你能理解我的意思 如果我关闭服务器并再次运行它 每次都是这样。根据我在代码中写的逻辑,它必须以一种适当的方式,如用户名、名字、姓氏、电子邮件、密码、密码确认 下面是my views.py:Python Django中注册表格式不正确,python,django,python-3.x,django-forms,django-views,Python,Django,Python 3.x,Django Forms,Django Views,现在,我正在Django做登记表。在我的注册表中,共有六个字段,如用户名、名字、姓氏、电子邮件、密码、密码确认。在我测试注册表的过程中,我发现了一件很奇怪的事情。每次字段改变位置时。我的意思是有时密码在第一位,姓氏在最后一位。每当我关闭服务器并再次运行它时,字段位置就会再次改变 请参见下面的一些屏幕截图。所以你能理解我的意思 如果我关闭服务器并再次运行它 每次都是这样。根据我在代码中写的逻辑,它必须以一种适当的方式,如用户名、名字、姓氏、电子邮件、密码、密码确认 下面是my views.py
from django.shortcuts import render, redirect
from accounts.forms import RegistrationForm
# Create your views here.
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
return redirect('/account')
else:
form = RegistrationForm()
args = {'form': form}
return render(request, 'accounts/reg_form.html', args)
下面是forms.py:
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class RegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = {
'username',
'first_name',
'last_name',
'email',
'password1',
'password2'
}
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
这是因为您将表单中的字段声明为集合而不是列表。将其声明为列表,所有内容都将按照您定义的顺序进行 这将使您的代码看起来像:
class RegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = [
'username',
'first_name',
'last_name',
'email',
'password1',
'password2'
]
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
一个非常微小的更改,但它应该可以做到这一点。你把密码的信息放在哪里了(目前你的代码片段没有这个)。@WillemVanOnsem在这里,我使用了django.contrib.auth.forms并导入了UserCreationForm。所以它会自动出现。