簡體   English   中英

如何使用Flask WTF獲取QuerySelectField當前值

[英]How to get QuerySelectField current value with Flask WTF

如果使用SelectField,我們可以使用obj參數從數據庫中獲取以表單形式預填充的當前值,例如我上一個問題的答案

現在,我想使用QuerySelectField獲取當前值。

這是我的代碼片段:

def course_list():
    return Course.query.all()

class PaymentForm(Form):
    total_price = IntegerField(validators=[required()])
    course_name = QuerySelectField('Course name', validators=[required()], query_factory=course_list)
    # ....
    # ....

這是路線。

@app.route('/edit_payment/<int:payment_id>', methods=['GET', 'POST'])
def edit_payment(payment_id):
    payment = Pament.query.filter_by(id=payment_id).first()
    course = db.session.query(Course.name).filter_by(id=payment.course_id).first()
    payment_form = PaymentForm(obj=course) # here I try to use the obj argument.
    # ... validate on submit
        # ....
        # ....
    return render_template(payment=payment, payment_form=payment_form)

在上面我稱為PaymentForm的路由上,我嘗試解析obj參數,但似乎它沒有從db中預填充當前用戶的值。

這是我在Jinja2模板上的稱呼:

{{ f.render_field(payment_form.course_name, value=payment.name) }}

所以,我的問題的重點是,如何基於數據庫上的當前用戶值獲取QuerySelectField值。

編輯

這是我的模型的片段:

class Payment(db.Model):
    __tablename__ = 'payment'
    id = db.Column(db.Integer, primary_key=True)
    course = db.relationship('Course', backref=db.backref('payment', lazy='dynamic'))
    # ...
    # ...
    def __init__(self, course):
        self.course = course

class Course(db.Model):
    __tablename__ = 'course'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True)
    # ...
    # ...
    def __init__(self, name):
        self.name = name

而且我還試圖像這樣通過obj傳遞值:

payment = Pament.query.filter_by(id=payment_id).first()
payment_form = PaymentForm(obj=payment)

我遵循這個好答案來弄清楚這一點。

這是解決我的問題的那條線。

form = PaymentForm(obj=payment)
form.course_name.default = default=lambda: db.query(Course).filter_by(id=payment.course_id).first()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM