Django ModelForm 和 Model 实例保存方法的区别

Fiv*_*ver 5 python django django-forms modelform

我试图了解 Django 的 ModelForm 保存方法和直接保存 Model 实例之间的区别。

个人觉得直接保存更直观,数据保存时间显示更清晰。另外,如果我需要在保存之前修改实例,那么我必须使用模型保存方法,正如 Django 文档在此处解释的那样。

那么,一旦表单被验证,有什么区别呢?如果表单使用多个模型或其他一些更复杂的用例,会有什么不同吗?

如果重要的话,我正在使用 Django 1.4 版。下面是一些代码,显示了我如何倾向于保存经过验证的表单数据。

提前致谢!

# models.py
class Project(models.Model):
    project_name = models.CharField(unique=True, null=False, blank=False)

# views.py
def add_project(request):
    if request.method == 'POST':
        project = Project()
        form = ProjectForm(request.POST, instance=project)

        if form.is_valid():
            project.save() ### <-- project.save() vs form.save() ###

            return HttpResponseRedirect(reverse('view_project', args=(project.id,)))
    else:
        form = ProjectForm()

    return render_to_response(
        'add_project.html',
        {
            'form': form,
        },
        context_instance=RequestContext(request)
    )

# forms.py
class ProjectForm(ModelForm):
    class Meta:
        model = Project
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 5

在您拥有的注释行中,project.save()根本不会做任何事情。该实例尚未使用表单数据更新,它只是您之前创建的两行空实例。更新现有实例的唯一方法是保存其表单。

  • 不,不是。它可能会作为调用 `form.is_valid()` 的副作用进行更新(查看源代码,调用 `ModelForm._post_save()`,后者又调用 `construct_instance()`),但确实如此不进行完整更新,不应依赖。你应该调用`form.save()`。 (7认同)