python - 这两种保存表单信息的方式有什么区别?
问题描述
我正在学习如何使用 django 表单,并且向我展示了两种从表单中保存信息的方法。我测试了两者并且都使用验证,但我不明白两者之间的区别。
第一个使用从models.Model类继承的函数,使用函数“objects.create(** form.cleaned_data)”并将表单字段作为参数传递。
在下面的示例中,我实例化了继承自“forms.ModelForm”的 ProductForm 类,并使用“cleaned_data”函数作为参数传递。
def product_create_view(request):
form = ProductForm()
if request.method == 'POST':
form = ProductForm(request.POST or None)
if form.is_valid():
**Product.objects.create(**form.cleaned_data)**
form = ProductForm()
data = {}
data['form'] = form
return render(request, 'products/product_create.html', data)
第二种方法不是使用函数'objects.create(** dict)',而是直接使用form.save()。
def product_create_view(request):
form = ProductForm()
if request.method == 'POST':
form = ProductForm(request.POST or None)
if form.is_valid():
**form.save()**
form = ProductForm()
data = {}
data['form'] = form
return render(request, 'products/product_create.html', data)
我想知道使用 form.save() 和使用 Product.objects.create(** dict) 之间有区别
解决方案
您只能调用form.save()
. ModelForm
这通常是创建和更新模型的最简单方法。请注意,form.save()
在这种情况下会返回已保存的实例,因此您可以product = form.save()
使用已保存的product
.
如果您创建了一个子类的表单Form
,那么它将不会链接到特定模型并且您将无法保存它。您必须从表单的cleaned_data
参数构建模型。您将手动定义表单的所有字段以模仿模型,这比 的工作量更大ModelForm
,您可以在其中提供fields
模型的字段列表。
最终结果没有区别,但通常 aModelForm
和 usingform.save()
是首选方式,因为它更具可读性并且更清楚你在做什么。
推荐阅读
- javascript - JS如何深拷贝两个对象
- javascript - 在Vue Js的for循环中为每个div提供随机背景图像
- deep-learning - 1 小时癫痫记录时间序列的 FPR
- plsql - ORA-00933: SQL 语句未结束
- python - Python 不允许我运行代码(_locateAll_python() 有一个意外的关键字参数 'confidence')
- python - 使用类标签附加散点图的问题
- keycloak - 如何在 keycloak 上创建无密码电子邮件/短信 otp?
- jquery - jquery click() 在这种情况下做什么?
- python - 在 Python 中检查文件校验和
- nestjs - Netstjs - 具有用户访问权限的多个全局守卫