在WTForms中,我可以根据数据库中的数据创建自定义验证器吗?
例如,我想显示一个多选字段,用户只能根据帐户类型(存储在数据库中)选择一定数量的值。
预期的行为是:
这可能吗?
答案 0 :(得分:2)
你可以编写一个自定义验证器来做你在python中可以做的任何事情:
user = # get user from request context
def account_type_check(form, field):
account = get_account_for_user(user) # insert your account retrieval logic here
if len(field.data) > account.user_limit:
raise ValidationError('Submission exceeded user's account type limit')
class SelectionForm(Form):
selection = MultiSelectField('Selection', [account_type_check])
值得注意的是,你可以说这是一种用于此类事情的恶意工具。表单验证库的目的是提供验证表单提交的 DRY 方法。这适用于测试字符串的长度,数字在范围内等等。一旦验证方案变得足够复杂,您就会花费更多的时间来使库满足您的需求,而不是自己编写验证。