首页 > 解决方案 > 这两种保存表单信息的方式有什么区别?

问题描述

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

标签: pythondjangodjango-modelsdjango-forms

解决方案


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

如果您创建了一个子类的表单Form,那么它将不会链接到特定模型并且您将无法保存它。您必须从表单的cleaned_data参数构建模型。您将手动定义表单的所有字段以模仿模型,这比 的工作量更大ModelForm,您可以在其中提供fields模型的字段列表。

最终结果没有区别,但通常 aModelForm和 usingform.save()是首选方式,因为它更具可读性并且更清楚你在做什么。


推荐阅读