我试图检查表单中是否存在某个对象,但我收到了错误消息。
我的观点:
def foo(request):
titulo = "something"
form = MyForm(request.POST or None)
queryset = myModel.objects.all()
if myModel.objects.filter(name=name).exists():
messages.error(request, 'already exists')
context = {
"titulo": titulo,
"form": form,
"queryset": queryset,
}
if form.is_valid():
instance = form.save()
messages.success(request, 'Added')
return redirect('/')
return render(request, "forms7.html", context)
基本上我正在做的是添加用户,如果用户存在,我想要一个警告说already exists
错误:
/ model / local变量中的UnboundLocalError' name' 在分配前引用
我做错了什么?
注意:
如果我将name = 'jesus'
添加到我的代码中并且jesus
存在则可行,但这不是我想要的。
我想检查输入的名称是否存在显示msg
有人可以帮助我吗?感谢。
答案 0 :(得分:0)
使用表单时,您可以通过调用is_valid
然后访问cleaned_data
来获取输入的表单字段,如下所示:
def foo(request):
titulo = "something"
form = MyForm(request.POST or None)
queryset = myModel.objects.all()
context = {
"titulo": titulo,
"form": form,
"queryset": queryset,
}
if form.is_valid():
name = form.cleaned_data['name']
if myModel.objects.filter(name=name).exists():
messages.error(request, 'already exists')
else:
instance = form.save()
messages.success(request, 'Added')
return redirect('/')
return render(request, "forms7.html", context)
理想情况下,您的表单中有clean_name
函数,以便您的视图不那么复杂。您可以阅读有关创建此类方法的更多信息here。
例如,您可能需要以下内容:例如,如果要验证CharField的内容 名为serialnumber的是唯一的,clean_serialnumber()是正确的 这样做的地方。你不需要特定的领域(它只是一个 CharField),但是你需要一个特定于表单域的验证, 可能,清理/规范化数据。
class MyForm(forms.Form)
def clean_name(self):
name = self.cleaned_data['name']
if myModel.objects.filter(name=name).exists():
raise new forms.ValidationError('The name [%s] already exists' % name)
return name