这两种保存表单信息的方式有何区别?

时间:2019-03-11 19:15:07

标签: python django django-models django-forms

我正在学习如何使用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)之间有区别

1 个答案:

答案 0 :(得分:1)

您只能在form.save()上呼叫ModelForm。通常,这是创建和更新模型的最简单方法。请注意,在这种情况下,form.save()返回保存的实例,因此您可以编写product = form.save()并使用保存的product做更多的事情。

如果您创建一个Form类的子窗体,则该窗体将不会链接到特定模型,并且您将无法保存它。您必须使用表单的cleaned_data参数来构建模型。您将已经手动定义了表单的所有字段来模仿模型,这比ModelForm的工作量大得多,在fields中,您只需为ModelForm提供模型字段的列表即可。

最终结果没有区别,但是通常首选form.save()并使用Sheet1,因为它更易读和清楚您在做什么。