我正在尝试实施用户注册和编辑表单:
class UniqueEmail(formencode.FancyValidator):
def _to_python(self, value, state):
if value in (email for (email, ) in DBSession.query(User.email)):
raise Invalid('Email already registered. '
'A single account per email is allowed', value, state)
return value
class UserEditData(formencode.Schema):
name = validators.String(not_empty=True)
email = All(validators.Email(not_empty=True),
UniqueEmail())
在注册时可以完美运行,但在编辑时,如果用户保持电子邮件不变,我(很明显)会得到一个无效的例外,因为电子邮件已经在数据库中。< / p>
我有当前user
可用(通过request.user
),因此我可以从查询中省略user.email
,但如何在user
验证程序中提供UniqueEmail
?