在model.py
中github = db.Column(db.String(120), unique=True, nullable=True)
emergency_number = db.Column(db.String(12),unique=True,nullable=True)
form.py
github = StringField('Github')
emergency_number = StringField('Emergency Number',validators=[Length(min=10,max=12)])
我想创建一个数据库,使,用户不能输入此表单并将其留空,但是如果用户输入,则内容应该是唯一的
但是问题是,如果第一个用户将其保留为空白,则其他用户无法将其保留为空
此github帐户为takem。请选择其他帐户
字段必须介于10到12个字符之间。
这些表格的错误
答案 0 :(得分:0)
一个custom validator
就可以了。
class FooForm(FlaskForm):
emergency_number = StringField('Emergency Number',validators=[Length(min=10,max=12)])
def validate_emergency_number(form, field):
if not field.raw_data:
number = Foo.query.filter_by(emergency_number=form.field.data).first()
if number:
raise ValidationError('Emergency number must be unique')
raise ValidationError('Emergency number cannot be blank')
您还可以创建一个新的验证器。
from wtforms.validators import ValidationError
class Unique(object):
def __init__(self, model, field, message='Emergency number should be unique'):
self.model = model
self.field = field
def __call__(self, form, field):
if not field.raw_data:
check = self.model.query.filter(self.field == field.data).first()
if check:
raise ValidationError(self.message)
raise ValidationError(message='Emergency number cannot be blank')
emergency_number = StringField('Emergency Number',validators=[Length(min=10,max=12), Unique(Foo, Foo.emergency_number)])