我正在学习如何使用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)之间有区别
答案 0 :(得分:1)
您只能在form.save()
上呼叫ModelForm
。通常,这是创建和更新模型的最简单方法。请注意,在这种情况下,form.save()
返回保存的实例,因此您可以编写product = form.save()
并使用保存的product
做更多的事情。
如果您创建一个Form
类的子窗体,则该窗体将不会链接到特定模型,并且您将无法保存它。您必须使用表单的cleaned_data
参数来构建模型。您将已经手动定义了表单的所有字段来模仿模型,这比ModelForm
的工作量大得多,在fields
中,您只需为ModelForm
提供模型字段的列表即可。
最终结果没有区别,但是通常首选form.save()
并使用Sheet1
,因为它更易读和清楚您在做什么。