Найти - Пользователи
Полная версия: WTForms-Alchemy (Flask) Порядок полей
Начало » Web » WTForms-Alchemy (Flask) Порядок полей
1
kaper156
Итак, существует форма:
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('Метод вычисления')
4kpt_IV
Во-во. Именно поэтому я и напилил свой класс. Там нет встроенного механизма. Мало того, если Вы внесете свое поле (которого нет в модели), то оно будет всегда отображаться последним
В wtforms предполагается, что Вы явно указываете все поля форме при заполнении шаблона. Меня это тоже расстроило и я перепелил немного базовый класс…
kaper156
4kpt_IV
Во-во. Именно поэтому я и напилил свой класс. Там нет встроенного механизма. Мало того, если Вы внесете свое поле (которого нет в модели), то оно будет всегда отображаться последним В wtforms предполагается, что Вы явно указываете все поля форме при заполнении шаблона. Меня это тоже расстроило и я перепелил немного базовый класс…
Не сочтите за дерзость, сударь, но можно ли взглянуть на него?
Или он сликшом связан с вашей конкретной моделью?
Может есть возможность переписать или сдеать обертку функции populate_object?
4kpt_IV
Функция populate_obj вообще из другого села. Она не соосна с выводом данных. Выкладывать смысла нет. Там много сделано таких вещей, которые нужны исключительно мне с учетом того, как я люблю собирать формы. Механизм реализации могу объяснить по скайпу и напишите свой
kaper156
Я слегка ошибся, и сделать это возможно (в моем случе):
(Ведь используется 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']
4kpt_IV
Оууу. Притормозите. Это очень плохая практика. Не надо так делать. Вообще патчить модель под формы это в высшей степени некрасиво.
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