【发布时间】:2013-05-10 04:25:38
【问题描述】:
ModelForms 是一种防止重复创建模型定义的好方法。我想做的是利用该功能并将其用于处理 POST 请求之外的其他用途。我经常使用表单进行验证。
例子:
假设您有一个包含字段(电子邮件、密码、名字、姓氏)的用户模型。 email 字段是唯一的并且是一个索引。
UserCreationForm:使用所有字段,如果电子邮件已存在则验证失败。处理 POST 请求 UserUpdateForm:相同的模型,但不允许更改电子邮件。因为这个字段被排除在外,所以没有问题。 UserAuthenticationForm:仅包括电子邮件和密码字段。问题是,这应该用于身份验证和验证失败,因为电子邮件已经存在。
有什么办法可以做到这一点吗?也就是说,让 UserAuthenticationForm 跳过电子邮件检查。
谢谢。
【问题讨论】:
-
这将是一个非常奇怪的调整,以后可能会影响您的代码,为身份验证编写表单并不难。你会更好地遵循编程原则关注点分离 en.wikipedia.org/wiki/Separation_of_concerns,让软件的每个部分都专注于自己的目标。
-
嗯.. 我不认为逻辑分离是问题。表单正在做一些非常特殊的事情。
-
我在评论中的意思与您在回答中所做的相同。您有一个用于创建/更新对象的表单,不要将它用于日志用户。仅将其用于创建的内容。
-
我现在明白了! ;) 我已经在进行更改。谢谢。
标签: python django django-models django-forms