Вопрос:

Flask WTForms динамические формы не заполняются в форме редактирования

python flask wtforms

48 просмотра

3 ответа

853 Репутация автора

У меня есть форма для повторного заполнения на странице редактирования, в моей форме у меня есть три selectField, которые связаны для заполнения. Но мой первый selectField (Cars) не выбрал правильное значение после повторного заполнения на странице редактирования, и в моем коде нет ошибок.

Это мой сценарий, когда я нажимаю изменить в таблице. Данные будут заполнены в форме редактирования. Но автомобиль выбрал поле не выбрал правильный автомобиль. Смотрите изображение ниже ...

Как заново заполнить данные на странице редактирования и выбрать правильное значение в выбранном поле?

введите описание изображения здесь

введите описание изображения здесь

Это мой код:

views.py

@bp.route('/edit_orders/<int:obj_id>/edit', methods=['GET'])
def edit_orders(obj_id):
    orders = Order.query.get(obj_id)
    form = OrderForm(obj=orders)
    form.cars.choices = [(c.id, c.car) for c in Car.query.order_by('id')]
    form.models.choices = [(m.id, m.model) for m in Model.query.filter(Model.car_id == orders.cars.id).all()]
    form.versions.choices = [(v.id, v.version) for v in Version.query.filter(Version.model_id == orders.models.id).all()]

    return render_template('edit_order.html', title="Edit Orders", form=form)

model.py

class Car(Base):
    __tablename__ = 'cars'
    id = Column(Integer, primary_key=True)
    car = Column(String(128), nullable=False)
    models = relationship("Model", back_populates="cars") # relationship
    orders = relationship("Order", back_populates="cars")

    def __init__(self, car=None):
        self.car = car

    def __repr__(self):
        return '<Car %r>' % self.car

    @property 
    def serializable(self):
        return {'id':self.id, 'car':self.car}

form.py

# -*- coding: utf-8 -*-
from flask_wtf import Form
from wtforms import SelectField, TextField, validators


class OrderForm(Form):
    cars = SelectField(u'Car', coerce=int)
    models = SelectField(u'Model', choices=[('', '--choose--')])
    versions = SelectField(u'Version', choices=[('', '--choose--')])
    customer_name = TextField(u'Customer', [validators.InputRequired('Customer is required.')])

Это весь мой исходный код в github. Я надеюсь, что кто-то может исправить мои ошибки / ошибки. Спасибо заранее.

Автор: Sukma Saputra Источник Размещён: 13.08.2019 06:47

Ответы (3)


1 плюс

859 Репутация автора

Могу ли я предложить вам следовать этим учебным пособиям ( 1 , 2 , 3 ) в их порядке, чтобы структура вашего приложения могла соответствовать передовым методикам структуры приложения колбы, а затем вы можете соответствующим образом изменить дизайн приложения. Я пытался взглянуть на твой код, но за ним не так просто следить, поэтому я не уверен, что я или кто-то еще могу помочь прямо сейчас.

И если вы заинтересованы в заполнении вашей базы данных данными с примерами данных для первоначального использования или для тестирования, вы можете посмотреть на это или это .

НОТА

Устранить эту линию <script type="text/javascript" src="{{ url_for('static', filename='vendor/jquery/dist/jquery.min.js') }}"></script>в , base.htmlпотому что ссылки на файл , который не существует (как на файлы , загруженные с GitHub страницы вашего приложения).

А также удалить эту строку <!DOCTYPE html>из файлов add_order.html, index.htmlи edit_order.htmlпотому , что это не нужно.

Автор: kellymandem Размещён: 13.08.2019 11:29

0 плюса

10 Репутация автора

Привет Сукма Сапутра, что вы используете для создания представления + нумерации страниц и поиска на странице редактирования?

Автор: Saul Da Silva Размещён: 13.08.2019 01:31

0 плюса

853 Репутация автора

Я получил ответ по этой ссылке .

И это мой код обновления, чтобы заполнить зависимости wtforms selecField на моей странице редактирования.

views.py

@bp.route('/edit_orders/<int:obj_id>/edit', methods=['GET'])
def edit_orders(obj_id):
    orders = Order.query.get(obj_id)
    form = OrderForm(obj=orders)
    form.car.choices = [(c.id, c.car) for c in Car.query.all()]
    form.model.choices = [(m.id, m.model) for m in Model.query.filter(Model.car_id == orders.cars.id).all()]
    form.version.choices = [(v.id, v.version) for v in Version.query.filter(Version.model_id == orders.models.id).all()]

    form.car.default = orders.cars.id
    form.model.default = orders.models.id
    form.version.default = orders.versions.id
    form.customer_name.default = orders.customer_name
    form.process()

    return render_template('edit_order.html', title="Edit Orders", form=form)

Я устанавливаю данные по умолчанию в поле формы и использую form.process()для вызова конструктора и выдачи выбранного значения в selectField.

Для всего кода вы можете получить в моем github .

Удачного кодирования.

Автор: Sukma Saputra Размещён: 14.08.2019 01:57
Вопросы из категории :
32x32