Django中注册表格的格式不正确

时间:2018-07-10 11:18:17

标签: python django python-3.x django-forms django-views

现在,我正在处理Django中的注册表。在我的注册表中,共有六个字段,例如用户名,名字,姓氏,电子邮件,密码,密码确认。在测试注册表时,我发现了一件奇怪的事情。每当字段更改位置时。我的意思是有时密码排在第一位,姓氏在最后一位。每当我关闭服务器并再次运行它时,字段的位置就会再次改变。

请参见下面的一些屏幕截图。这样您就可以理解我的意思。

Image1

如果我关闭服务器并再次运行它,那么

Image2

它每次都发生。根据我在代码中编写的逻辑,它必须以一种正确的方式使用,例如用户名,名字,姓氏,电子邮件,密码,密码确认。

以下是我的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

1 个答案:

答案 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

非常微小的变化,但是应该可以解决问题。