如果输入不是唯一的,我正在寻找检查额外字段的方法。使用纯Flask + WTForms我可以像这样创建表单类:
class EditProfileAdminForm(Form):
nickname = StringField('Nickname (login)', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired(), Email()])
def __init__(self, user, *args, **kwargs):
super(EditProfileAdminForm, self).__init__(*args, **kwargs)
self.user = user
def validate_email(self, field):
if field.data != self.user.email and \
User.query.filter_by(email=field.data).first():
raise ValidationError('Email is already registered.')
但是当我实现自定义ModelView时如何创建/修改表单类?向ModelView添加额外字段如下所示:
class UserModelView(ModelView):
form_columns = ('f_email', 'nickname')
form_extra_fields = {
'f_email': StringField('Email')
}
并且简单的定义validate_f_email不起作用。
答案 0 :(得分:0)
我找到了两种方法来验证指定模型的字段值unicity。
覆盖on_model_change()函数。此功能在创建或更新模型之前执行一些操作
def on_model_change(self, form, model, is_created):
if form.f_email.data != model.email and \
User.query.filter_by(email=form.f_email.data).first():
raise ValidationError('Email is already registered.')
model.email = form.f_email.data
我还发现flask-admin提供了唯一的验证器。您需要的一切是将其附加到验证者列表:
class UserModelView(ModelView):
form_columns = ('f_email', 'nickname')
form_extra_fields = {
'f_email': StringField('Email', validators=[Email(), Unique(db.session,
models.User,
models.User.email)])
}