位于/accounts/register/\uyu init_u9()处的TypeError获取了意外的关键字参数“instance”

2024-03-28 16:06:16 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django 2.0中,当尝试使用自定义用户模型注册用户时,我得到以下错误。在

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/accounts/register/

Django Version: 2.0.5
Python Version: 3.6.1
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'crispy_forms',
 'homepage',
 'account']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\Users\mittr\Desktop\MLASSI~1\mom\lib\site-packages\django\core\handlers\exception.py" in inner
  35.             response = get_response(request)

File "C:\Users\mittr\Desktop\MLASSI~1\mom\lib\site-packages\django\core\handlers\base.py" in _get_response
  128.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\mittr\Desktop\MLASSI~1\mom\lib\site-packages\django\core\handlers\base.py" in _get_response
  126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\mittr\Desktop\MLASSI~1\mom\lib\site-packages\django\views\generic\base.py" in view
  69.             return self.dispatch(request, *args, **kwargs)

File "C:\Users\mittr\Desktop\ML Assignments\mom\src\account\views.py" in dispatch
  39.             return super(RegisterView, self).dispatch(*args, **kwargs)

File "C:\Users\mittr\Desktop\MLASSI~1\mom\lib\site-packages\django\views\generic\base.py" in dispatch
  89.         return handler(request, *args, **kwargs)

File "C:\Users\mittr\Desktop\MLASSI~1\mom\lib\site-packages\django\views\generic\edit.py" in get
  168.         return super().get(request, *args, **kwargs)

File "C:\Users\mittr\Desktop\MLASSI~1\mom\lib\site-packages\django\views\generic\edit.py" in get
  133.         return self.render_to_response(self.get_context_data())

File "C:\Users\mittr\Desktop\MLASSI~1\mom\lib\site-packages\django\views\generic\edit.py" in get_context_data
  66.             kwargs['form'] = self.get_form()

File "C:\Users\mittr\Desktop\MLASSI~1\mom\lib\site-packages\django\views\generic\edit.py" in get_form
  33.         return form_class(**self.get_form_kwargs())

Exception Type: TypeError at /accounts/register/
Exception Value: __init__() got an unexpected keyword argument 'instance'

在网址.py

^{pr2}$

在视图.py

class RegisterView(CreateView):
    form_class = UserRegistrationForm
    template_name = 'registration/register.html'
    success_url = '/'

    def dispatch(self, *args, **kwargs):
        if self.request.user.is_authenticated:
            return redirect('/login')
        else:
            return super(RegisterView, self).dispatch(*args, **kwargs)

在表单.py

class UserRegisterForm(forms.ModelForm):

    password1 = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Email'}))
    password2 = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Email'}))

    class Meta:
        model = User
        fields = ['email', 'full_name']

    def clean_password2(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')

        if password1 and password2 and password1 != password2:
            raise forms.ValidationError("Passwords do not match.")
        else:
            return password2

    def clean_email(self):
        email = self.cleaned_data.get('email')
        qs = User.objects.get(email__iexact=email)
        if qs.exists():
            raise forms.ValidationError("A user with this email already exists.")
        else:
            return email

    def save(self, commit=True):
        user = super(UserRegisterForm, self).save(commit=False)
        user.set_password(self.cleaned_data['password1'])
        user.is_active = False

        if commit:
            user.save()
        return user

其他信息

我继续C:\Users\mittr\Desktop\ML Assignments\mom\Lib\site-packages\django\views\generic\edit.py,我看到第33行有以下内容:

`return form_class(**self.get_form_kwargs())`

{cd2>注册成功时,{cd2>显示。然而,我认为这并不是做生意的最佳方式。在

另外,中的save()方法表单.py文件从未执行,因此用户从未保存在自定义用户模型中。如果有任何帮助,我们也将不胜感激。在


Tags: djangoinpyselfformgetreturnpackages
1条回答
网友
1楼 · 发布于 2024-03-28 16:06:16

您的视图被设置为使用UserRegistrationForm,但您的表单是UserRegisterForm。在

假定UserRegisterForm是一个单独的表单,它不是modelform,也没有自定义的保存方法。你应该改变你的观点,指向正确的形式。在

相关问题 更多 >