Уведомления

Группа в Telegram: @pythonsu

#1 Март 10, 2016 19:27:18

kaper156
Зарегистрирован: 2015-06-06
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

WTForms-Alchemy (Flask) Порядок полей

Итак, существует форма:

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)

Офлайн

#2 Март 10, 2016 20:39:42

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

WTForms-Alchemy (Flask) Порядок полей

Во-во. Именно поэтому я и напилил свой класс. Там нет встроенного механизма. Мало того, если Вы внесете свое поле (которого нет в модели), то оно будет всегда отображаться последним
В wtforms предполагается, что Вы явно указываете все поля форме при заполнении шаблона. Меня это тоже расстроило и я перепелил немного базовый класс…

Офлайн

#3 Март 10, 2016 20:49:22

kaper156
Зарегистрирован: 2015-06-06
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

WTForms-Alchemy (Flask) Порядок полей

4kpt_IV
Во-во. Именно поэтому я и напилил свой класс. Там нет встроенного механизма. Мало того, если Вы внесете свое поле (которого нет в модели), то оно будет всегда отображаться последним В wtforms предполагается, что Вы явно указываете все поля форме при заполнении шаблона. Меня это тоже расстроило и я перепелил немного базовый класс…
Не сочтите за дерзость, сударь, но можно ли взглянуть на него?
Или он сликшом связан с вашей конкретной моделью?
Может есть возможность переписать или сдеать обертку функции populate_object?

Отредактировано kaper156 (Март 10, 2016 20:52:43)

Офлайн

#4 Март 10, 2016 21:03:16

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

WTForms-Alchemy (Flask) Порядок полей

Функция populate_obj вообще из другого села. Она не соосна с выводом данных. Выкладывать смысла нет. Там много сделано таких вещей, которые нужны исключительно мне с учетом того, как я люблю собирать формы. Механизм реализации могу объяснить по скайпу и напишите свой

Отредактировано 4kpt_IV (Март 10, 2016 21:03:28)

Офлайн

#5 Март 10, 2016 21:04:17

kaper156
Зарегистрирован: 2015-06-06
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

WTForms-Alchemy (Flask) Порядок полей

Я слегка ошибся, и сделать это возможно (в моем случе):
(Ведь используется 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']

Офлайн

#6 Март 10, 2016 21:08:23

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

WTForms-Alchemy (Flask) Порядок полей

Оууу. Притормозите. Это очень плохая практика. Не надо так делать. Вообще патчить модель под формы это в высшей степени некрасиво.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version