Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中注册表格式不正确_Python_Django_Python 3.x_Django Forms_Django Views - Fatal编程技术网

Python Django中注册表格式不正确

Python Django中注册表格式不正确,python,django,python-3.x,django-forms,django-views,Python,Django,Python 3.x,Django Forms,Django Views,现在,我正在Django做登记表。在我的注册表中,共有六个字段,如用户名、名字、姓氏、电子邮件、密码、密码确认。在我测试注册表的过程中,我发现了一件很奇怪的事情。每次字段改变位置时。我的意思是有时密码在第一位,姓氏在最后一位。每当我关闭服务器并再次运行它时,字段位置就会再次改变 请参见下面的一些屏幕截图。所以你能理解我的意思 如果我关闭服务器并再次运行它 每次都是这样。根据我在代码中写的逻辑,它必须以一种适当的方式,如用户名、名字、姓氏、电子邮件、密码、密码确认 下面是my views.py

现在,我正在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。所以它会自动出现。