python - 在 Django 中注册表单不会发布请求方法
问题描述
我RegisterForm
从 django更改了我的UserCreationForm
,因为我想以形式翻译标签。它工作正常,但是当我尝试按下Sign Up
按钮时,它显示错误消息:
'RegisterForm' object is not callable
它可能会变成错误,因为我更改UserCreationForm
并class 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”对象不可调用
解决方案
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
,因此错误