现在,我正在处理Django中的注册表。在我的注册表中,共有六个字段,例如用户名,名字,姓氏,电子邮件,密码,密码确认。在测试注册表时,我发现了一件奇怪的事情。每当字段更改位置时。我的意思是有时密码排在第一位,姓氏在最后一位。每当我关闭服务器并再次运行它时,字段的位置就会再次改变。
请参见下面的一些屏幕截图。这样您就可以理解我的意思。
如果我关闭服务器并再次运行它,那么
它每次都发生。根据我在代码中编写的逻辑,它必须以一种正确的方式使用,例如用户名,名字,姓氏,电子邮件,密码,密码确认。
以下是我的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
答案 0 :(得分:1)
这是因为您将表单中的字段声明为集合而不是列表。将其声明为列表,一切将按照您定义的顺序进行。
这将使您的代码看起来像这样:
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
非常微小的变化,但是应该可以解决问题。