gpt4 book ai didi

python - 清除 Django 中验证错误时的所有表单字段

转载 作者:行者123 更新时间:2023-12-01 03:05:56 24 4
gpt4 key购买 nike

我有一个简单的用户注册表(在 forms.py 中):

from django.contrib.auth.models import User

class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput
validators=[MinLengthValidator(6)])
password_repeat = forms.CharField(widget=forms.PasswordInput)

class Meta:
model = User
fields = ['username', 'password','password_repeat']

如果有人尝试输入某些内容并且验证失败,我希望再次呈现相同的表单,但应清除所有字段。目前我的 View 如下所示(在views.py中):

def signup(request):
form = UserForm(request.POST or None)

if form.is_valid():
user = form.save(commit=False)
username = form.cleaned_data['username']
password = form.cleaned_data['password']
password_repeat = form.cleaned_data['password-repeat']
user.set_password(password)
user.save()
user = auth.authenticate(username=username, password=password)
if user is not None and user.is_active:
auth.login(request, user)
return redirect('/')

return render(request, 'signup.html', {'form': form})

问题在于 form.fields['username'] 字段仍然包含输入的用户名,因此会传递给渲染。

我一直在寻找解决方案,但找不到。我的猜测是,该解决方案与我似乎不明白的 clean() 方法有关。

最佳答案

这是一件奇怪的事情 - 它与人们通常提出的问题相反,因为大多数人希望保留字段并显示错误。

但是,如果您确实想清除表单,则应该实例化一个新表单。

if form.is_valid():
...
else:
form = UserForm()
return render(request, 'signup.html', {'form': form})

关于python - 清除 Django 中验证错误时的所有表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43425116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com