【发布时间】:2017-06-23 16:13:29
【问题描述】:
我有一个 FlaskForm 类,我在其中验证字段值是否已在系统中,并在需要时引发 ValidationError。
def validate_username(self, username_field):
if User.query.filter_by(username=username_field.data).first():
raise ValidationError("This username is already taken.")
对于用户,我实际上不得不使用不同的验证来创建一个单独的 Form 类来更新模型。
def validate_username(self, username_field):
if current_user.username != username_field.data:
if User.query.filter_by(username=username_field.data).first():
raise ValidationError("Cannot change username to this as it already is taken.")
但是现在我需要使用另一个我无法从 Form 类访问的模型,因为它与用户无关(它取决于正在编辑的记录)。我不确定如何进行此验证,如果可能的话,我不希望这些模型有两个 FlaskForm 类。
有什么方法可以将某些验证方法仅应用于某个操作(创建与更新),还是我必须为每个具有唯一字段的模型编写多个 FlaskForm 类?
我认为这种设计模式必须经常出现,但找不到处理它的好例子。
【问题讨论】:
-
你能澄清一下吗?您是在问是否可以为每个模型使用一个 FlaskForm 类,或者您需要创建一个单独的 FlaskForm 来为每个模型添加和编辑案例?
-
我希望每个模型只使用一个 FlaskForm,但是在创建和编辑时我需要不同的验证。我想知道是否有一种方法可以做到这一点,而无需为每个模型设置两个 FlaskForm 类。此外,即使每个模型确实需要两个 FlaskForm 类,我也不确定如何验证现有记录中的信息并将其与输入到表单中的新信息进行比较以确定它是否已使用 FlaskForm 自定义验证进行了更改(这样做需要在视图中完成吗?如果是,如何在
validate_on_submit()成功后再次引发ValidationError?)。
标签: python flask wtforms flask-wtforms