Форум сайта python.su
Итак, существует форма:
class AspectForm(ModelForm, Form): class Meta: model = Aspect calculations = SelectField('Метод вычисления') def __init__(self, *args, **kwargs): super(AspectForm, self).__init__(*args, **kwargs) query = db.session.query(Calculation).all() self.calculations.choices = [(c.id, c.name) for c in query]
class Aspect(OlympiadBase): __tablename__ = 'Aspect' description = Column(Text, label='Описание') parent_id = db.Column(db.Integer, db.ForeignKey('SubCriterion.id')) sub_criterion = db.relationship('SubCriterion', backref=db.backref('Aspect', lazy='dynamic')) calculation_id = Column(db.Integer, db.ForeignKey('Calculation.id'), label='Метод') calculation = db.relationship('Calculation', backref=db.backref('Aspect', lazy='dynamic'))
calculation_id = Column(db.Integer, db.ForeignKey('Calculation.id'), label='Метод')
calculations = SelectField('Метод вычисления')
Отредактировано kaper156 (Март 10, 2016 19:27:51)
Офлайн
Во-во. Именно поэтому я и напилил свой класс. Там нет встроенного механизма. Мало того, если Вы внесете свое поле (которого нет в модели), то оно будет всегда отображаться последним
В wtforms предполагается, что Вы явно указываете все поля форме при заполнении шаблона. Меня это тоже расстроило и я перепелил немного базовый класс…
Офлайн
4kpt_IVНе сочтите за дерзость, сударь, но можно ли взглянуть на него?
Во-во. Именно поэтому я и напилил свой класс. Там нет встроенного механизма. Мало того, если Вы внесете свое поле (которого нет в модели), то оно будет всегда отображаться последним В wtforms предполагается, что Вы явно указываете все поля форме при заполнении шаблона. Меня это тоже расстроило и я перепелил немного базовый класс…
Отредактировано kaper156 (Март 10, 2016 20:52:43)
Офлайн
Функция populate_obj вообще из другого села. Она не соосна с выводом данных. Выкладывать смысла нет. Там много сделано таких вещей, которые нужны исключительно мне с учетом того, как я люблю собирать формы. Механизм реализации могу объяснить по скайпу и напишите свой
Отредактировано 4kpt_IV (Март 10, 2016 21:03:28)
Офлайн
Я слегка ошибся, и сделать это возможно (в моем случе):
(Ведь используется sqlalchemy_defaults, которая по сути дает возможность описывать в одном месте как модель так и форму)
class Aspect(OlympiadBase): __tablename__ = 'Aspect' description = Column(Text, label='Описание') parent_id = db.Column(db.Integer, db.ForeignKey('SubCriterion.id')) sub_criterion = db.relationship('SubCriterion', backref=db.backref('Aspect', lazy='dynamic')) calculation_id = Column(db.Integer, db.ForeignKey('Calculation.id'), label='Метод', info={'choices': [(c.id, c.name) for c in db.session.query(Calculation).all()]}) calculation = db.relationship('Calculation', backref=db.backref('Aspect', lazy='dynamic')) class AspectForm(ModelForm, Form): class Meta: model = Aspect include = ['calculation_id']
Офлайн
Оууу. Притормозите. Это очень плохая практика. Не надо так делать. Вообще патчить модель под формы это в высшей степени некрасиво.
Офлайн