将表单值保存到数据库的不同方法



我最近开始使用Udemy课程学习Django。在完成课程时,教师要求将值从表单保存到数据库。 在互联网上搜索后,我想出了如何将表单值放入数据库,一切正常。以下是我的views.pyforms.py文件。

forms.py

class FormName(forms.Form):
fname = forms.CharField( label="First Name")
lname = forms.CharField(label="Last name:")
email = forms.EmailField()
verify_email = forms.EmailField(label='Verify Email:')
def clean(self):
all_clean_data = super().clean()
email = all_clean_data['email']
vmail = all_clean_data['verify_email']
if email != vmail:
raise forms.ValidationError("Check the emails")

views.py

def signup(request):
form = forms.FormName()
if request.method == 'POST':
form = forms.FormName(request.POST)
if form.is_valid():
post = User()
post.fname=request.POST.get('fname')
post.lname=request.POST.get('lname')
post.email=request.POST.get('email')
post.save()
return render(request,'third_app/greet.html')
else:
return render(request,'third_app/oops.html',{'form':form})
return render(request, 'third_app/signup.html',{'form':form})

现在来个问题,教师正在使用Meta类将表单值存储到数据库中。以下是他的forms.pyviews.py文件。我很好奇我的方法和教练的方法有什么区别。

forms.py

class FormName(forms.ModelForm):
class Meta():
model = User    
fields = 'all'

views.py

def signup(request):
form = forms.FormName()
if request.method == 'POST':
form = forms.FormName(request.POST)
if form.is_valid():
form.save(commit=True)
return render(request,'third_app/greet.html')
else:
return render(request,'third_app/oops.html',{'form':form})
return render(request, 'third_app/signup.html',{'form':form})

谢谢。

Django 文档很好地解释了这一点。这就是所谓的ModelForm

如果你正在构建一个数据库驱动的应用程序,你很可能会拥有与 Django 模型非常接近的表单。例如,您可能有一个 BlogComment 模型,并且想要创建一个允许人们提交评论的表单。在这种情况下,在表单中定义字段类型是多余的,因为您已经在模型中定义了字段。 出于这个原因,Django 提供了一个帮助程序类,允许你从 Django 模型创建一个 Form 类。

因此,为了回答您的问题,您的方法使用常规表单(forms.Form(,您可以在其中定义表单字段,执行验证,然后将每个字段分别保存在视图中。使用form.ModelForm时,将为您处理字段验证和保存。看到您已经定义了字段是什么,ModelForm使用它来执行验证。save()方法可以方便地将每个字段保存到数据库中。

相关内容

  • 没有找到相关文章

最新更新