Flask-WTF - создайте поле, которое должно быть уникальным и не может быть пустым - PullRequest
0 голосов
/ 29 сентября 2018

в 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)])

Я хочу создать базу данных таким образом, чтобы пользователь не мог ввести эту форму и оставить ее пустой,но если пользователь вводит контент, он должен быть уникальным

, но проблема заключается в заполнении формы, если 1-й пользователь оставит это поле пустым, ни один другой пользователь не сможет оставить его пустым

Эта учетная запись github занята. Пожалуйста, выберите другой

Поле должно содержать от 10 до 12 символов.

ошибка для этих форм

1 Ответ

0 голосов
/ 29 сентября 2018

A 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)])
...