ModelForms是防止重复创建模型定义的好方法。我想要做的是利用该功能,并将其用于处理POST请求。我经常使用表格进行验证。
示例:
假设您有一个包含字段的用户模型(email,password,first_name,last_name)。电子邮件字段是唯一的索引。
UserCreationForm:使用所有字段,如果电子邮件已存在则验证失败。处理POST请求 UserUpdateForm:相同的型号,但不允许更改电子邮件。因为这个字段被排除在外没有问题。 UserAuthenticationForm:仅包含电子邮件和密码字段。问题是,这应该用于身份验证和验证失败,因为电子邮件已经存在。
有没有办法可以做到这一点?也就是说,让UserAuthenticationForm跳过电子邮件检查。
谢谢。
答案 0 :(得分:0)
ModelForms
用于创建/更新对象。身份验证不会修改模型实例(User
),因此请使用普通表单。
来自文档:
save()方法
ModelForm生成的每个表单都有一个save()方法。这种方法 从绑定到表单的数据创建并保存数据库对象。一个 ModelForm的子类可以接受现有的模型实例作为 关键字参数实例;如果提供了这个,save()将更新 那个例子。如果没有提供,save()将创建一个新实例 指定模型的。
如果您不打算使用此save()
方法,并且您不需要大多数模型字段(只有用户名/电子邮件和密码),那么您将丢弃所提供的大部分功能在ModelForm
之后,为什么你会在第一时间使用它?