首页 > 解决方案 > 在 Django 中注册表单不会发布请求方法

问题描述

RegisterForm从 django更改了我的UserCreationForm,因为我想以形式翻译标签。它工作正常,但是当我尝试按下Sign Up按钮时,它显示错误消息:

 'RegisterForm' object is not callable 

它可能会变成错误,因为我更改UserCreationFormclass RegisterForm(UserCreationForm)仅返回一个名为的 var user- 没有该 var__call__的方法UserCreationForm和使用的POST方法user。错误消息中甚至有问题行。这是行,这里是整个代码。有没有办法可以使用POST方法来编辑UserCreationForm

  form = user(request.POST)


from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User
from django.contrib import messages

class RegisterForm(UserCreationForm):

    email = forms.EmailField(label = "Eメール",
        widget=forms.TextInput(attrs={'style': 'position: relative;left: 61px;'}))
    first_name = forms.CharField(label = "名", max_length=10,
        widget=forms.TextInput(attrs={'style': 'position: relative;left: 105px;'}))
    last_name = forms.CharField(label = "性", max_length=10,
        widget=forms.TextInput(attrs={'style': 'position: relative;left: 105px;'}))
    username = forms.CharField(label = "ユーザー名", max_length=10,
        widget=forms.TextInput(attrs={'style': 'position: relative;left: 40px;'}))
    password1 = forms.CharField(label = "パスワード",
        widget=forms.TextInput(attrs={'style': 'position: relative;left: 40px;'}))
    password2 = forms.CharField(label = "パスワード確認",
        widget=forms.TextInput(attrs={'style': 'position: relative;left: 8px;'}))

    class Meta:
        model = User
        fields = ("username", "first_name", "last_name", "email", "password1", "password2")


        def save(self, commit=True):
            user = super(RegisterForm, self).save(commit=False)
            user.username = self.cleaned_data["username"]
            user.first_name = self.cleaned_data["first_name"]
            user.last_name = self.cleaned_data["last_name"]
            user.email = self.cleaned_data["email"]
            user.password1 = self.cleaned_data["password1"]
            user.password2 = self.cleaned_data["password2"]
            if commit:
                user.save()
            return user



user = RegisterForm()

def register(request):
    if request.method == 'POST':
        form = user(request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            messages.success(request, f'Account created for {username}!')
            return redirect('blog-home')
    else:
        form = user
    return render(request, 'users/register.html', {'form': form})


这是整个错误代码:

Internal Server Error: /register/
Traceback (most recent call last):
   File "/home/marcel/.virtualenvs/django/lib/python3.7/site-packages   /django/core/handlers/exception.py", line 34, in inner
     response = get_response(request)
   File "/home/marcel/.virtualenvs/django/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
     response = self.process_exception_by_middleware(e, request)
    File "/home/marcel/.virtualenvs/django/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
     response = wrapped_callback(request, *callback_args, **callback_kwargs)
    File "/home/marcel/website/users/views.py", line 45, in register
form = user(request.POST)

TypeError:“RegisterForm”对象不可调用

标签: pythondjangopython-3.x

解决方案


user = RegisterForm() // remove this

def register(request):
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            messages.success(request, f'Account created for {username}!')
            return redirect('blog-home')
    else:
        form = RegisterForm()
    return render(request, 'users/register.html', {'form': form})

你所做的事情称为对象创建,user var是一个对象而不是FORM,因此错误


推荐阅读