Найти - Пользователи
Полная версия: WTForms-Alchemy (Flask) Значение от 0 до ... [значение из запроса в базу]
Начало » Web » WTForms-Alchemy (Flask) Значение от 0 до ... [значение из запроса в базу]
1
kaper156
Здравствуйте, очередная глупая проблема.
Есть два объекта:
class Olympiad(db.Model):
    __tablename__ = 'Olympiad'
    id = Column(Integer, primary_key=True, nullable=False, autoincrement=True)
    name = Column(String, label='Название', nullable=False)
    date = Column(Date, label='Дата', nullable=False)
    description = Column(String, label='Описание')
    # Status?
    def __str__(self):
        return '<Олимпиада: "%s" от [%s]>' % (self.name, self.date)
class Criterion(OlympiadBase):
    __tablename__ = 'Criterion'
    olympiad_id = db.Column(db.Integer, db.ForeignKey('Olympiad.id'))
    olympiad = db.relationship('Olympiad', backref=db.backref('Criterion', lazy='dynamic'))
    def __str__(self):
        return '<Модуль: "%s" (%s)>' % (self.name, self.max_balls)
Criterion имеет поле max_balls (берет его из OlympiadBase), его значение не должно превышать Olympiad.max_balls и других Criterion в сумме, вообщем:
value < olympiad.max_balls - sum([criterion.max_balls for criterion in other_criterion])
Как мне правильно производить валидацию?
Ведь если записывать в параметр валидатора max=MyCalcMax()
То максимум будет статичен и глуп, спустя пару изменений

В арсенале используется (requirments.txt)):
Flask==0.10.1
Flask-SQLAlchemy==2.1
Flask-WTF==0.12
Jinja2==2.8
MarkupSafe==0.23
SQLAlchemy==1.0.12
SQLAlchemy-Defaults==0.4.4
SQLAlchemy-Utils==0.31.6
WTForms==2.1
WTForms-Alchemy==0.15.0
WTForms-Components==0.10.0
Werkzeug==0.11.4
decorator==4.0.9
infinity==1.3
intervals==0.6.0
itsdangerous==0.24
six==1.10.0
validators==0.10

4kpt_IV
kaper156
Ведь если записывать в параметр валидатора max=MyCalcMax()
То максимум будет статичен и глуп, спустя пару изменений

Не понял. Поясните. А лучше примером.
kaper156
При такой записи (установлен Wtforms-Alchemy):
def max_ball_to_crit():
    return 100
class Criterion(OlympiadBase):
    __tablename__ = 'Criterion'
    olympiad_id = db.Column(db.Integer, db.ForeignKey('Olympiad.id'))
    olympiad = db.relationship('Olympiad', backref=db.backref('Criterion', lazy='dynamic'))
    max_balls = Column('Максимум баллов', Integer, info={'max': max_ball_to_crit()})
    def __str__(self):
        return '<Модуль: "%s" (%s)>' % (self.name, self.max_balls)
Функция вернет туда значение 100 и больше не будет вызваться?
4kpt_IV
kaper156
Функция вернет туда значение 100 и больше не будет вызваться?

Да.

Вы связываете не объект функции, а объект результата функции…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB