表单的save()方法实际上有什么作用?

时间:2019-12-12 10:05:56

标签: django django-forms

我正在观看django教程,其中使用了以下代码:

class UserFormView(View):
    form_class=UserForm

    def post(self:request):
        form=self.form_class(request.POST)
        if form.is_valid():
            user=form.save()
            username=form.cleaned_data('username')
            password=form.cleaned_data('password')
            user.set_password(password)
            user.save()

在本教程中,据说form.save()命令将字段数据存储到shell中,我发现这令人难以置信的误导。 save命令不应该将数据保存到数据库中的用户对象吗?接下来,他们使用set_password保存密码值,set_password会做什么?它会散列密码输入吗?

最后,通过在用户上调用save()将用户详细信息保存到数据库中。但是django怎么也知道哪个模型用户属于?当您调用form.save()并将结果分配给user时,还会获取该信息吗?

谢谢

2 个答案:

答案 0 :(得分:1)

我不知道这个“教程”是从哪里来的,但它的坏处和可能的程度一样。

假设UserForm是(正确书写的)ModelForm(您没有发布表单的定义),form.save()应该已经做好了正确的事情(在数据库,其密码已经加密,并返回新创建的User实例)。

我的建议:忘记此教程,请改用官方的教程,并使用官方文档了解更多详细信息。

答案 1 :(得分:0)

FIY,您的代码中存在缩进问题(或者只是格式问题)。 form.save()的目的是将相关模型保存到数据库,对了。

对于set_password,您也很正确,有关read the docs的更多信息。

Django知道模型及其所有数据,这是因为它拥有实例(在您的情况下为user)。该数据可从该实例-see the docs获得。

希望有帮助。