/accounts/register 处的值错误。无法创建用户,因为数据未验证。 (django 模型形式)
ValueError at /accounts/register. The User could not be created because the data didn't validate. (django model form)
我不明白为什么会出现这个错误。所以,这是我非常简单的用户模型:
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
pass
我的模特表格:
class RegistrationForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Cofirm Password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('username', 'email')
def clean_password(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
return False
return True
def save(self, commit=True):
user = super().save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
以及我调用 form.save() 方法的观点:
class Register(View):
template = 'application/register.html'
success_url = 'application:index'
def get(self, request):
ctx = {
'form': RegistrationForm(),
}
return render(request, self.template, ctx)
def post(self, request):
form = RegistrationForm(request.POST)
instance = form.save(commit=False)
if not form.is_valid():
ctx = {
'form': RegistrationForm(),
}
return render(request, self.template, ctx)
instance.save()
login(request, instance)
return redirect(self.success_url)
有人可以帮我理解我做错了什么吗??
谢谢
您不能在 .is_valid()
.
之前 运行 instance = form.save(commit=False)
先验证表单 然后 创建 User
实例。如果表单未通过验证,我已经为您创建了一条路线 return 返回错误。
def post(self, request):
form = RegistrationForm(request.POST)
if form.is_valid():
instance = form.save()
login(request, instance)
return redirect(self.success_url)
ctx = {
'form': form,
}
return render(request, self.template, ctx)
但请确保在模板中呈现错误。这方面的一个例子是:
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
我不明白为什么会出现这个错误。所以,这是我非常简单的用户模型:
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
pass
我的模特表格:
class RegistrationForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Cofirm Password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('username', 'email')
def clean_password(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
return False
return True
def save(self, commit=True):
user = super().save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
以及我调用 form.save() 方法的观点:
class Register(View):
template = 'application/register.html'
success_url = 'application:index'
def get(self, request):
ctx = {
'form': RegistrationForm(),
}
return render(request, self.template, ctx)
def post(self, request):
form = RegistrationForm(request.POST)
instance = form.save(commit=False)
if not form.is_valid():
ctx = {
'form': RegistrationForm(),
}
return render(request, self.template, ctx)
instance.save()
login(request, instance)
return redirect(self.success_url)
有人可以帮我理解我做错了什么吗??
谢谢
您不能在 .is_valid()
.
instance = form.save(commit=False)
先验证表单 然后 创建 User
实例。如果表单未通过验证,我已经为您创建了一条路线 return 返回错误。
def post(self, request):
form = RegistrationForm(request.POST)
if form.is_valid():
instance = form.save()
login(request, instance)
return redirect(self.success_url)
ctx = {
'form': form,
}
return render(request, self.template, ctx)
但请确保在模板中呈现错误。这方面的一个例子是:
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}