Flask下拉列表與資料庫同步問題解決記錄
阿新 • • 發佈:2019-02-03
剛開始 我的表單是這麼寫的
forms.py:
tags = Tag.query.all()
class MovieForm(FlaskForm):
"""電影表單"""
tag_id = SelectField(
label="標籤",
validators=[DataRequired("請選擇標籤")],
description="標籤",
coerce=int,
choices=[(v.id, v.name) for v in tags],
render_kw={"class" : "form-control"}
)
在表單類之外 先執行 查詢標籤的 動作 tags = Tag.query.all(),但是我發現我在另外一個頁面新增標籤成功之後,返回在電影新增頁面 進行tag選取時,下拉框中出現的內容並沒有剛才新新增的tag,
懷疑是tags = Tag.query.all()這條語句並沒有被呼叫
在網上搜索嘗試後 解決方法如下:
class MovieForm(FlaskForm):
"""電影表單"""
tag_id = SelectField(
label="標籤",
validators=[DataRequired("請選擇標籤" )],
description="標籤",
coerce=int,
render_kw={"class": "form-control"}
)
def __init__(self, *args, **kwargs):
super(MovieForm, self).__init__(*args, **kwargs)
self.tag_id.choices = [(v.id, v.name) for v in Tag.query.all()]
通過_init_()方法 初始化tag_id.choices
還有另外一種直接下拉選擇設定的值,然後將選擇的值讀取儲存
程式碼如下:
class MovieForm(FlaskForm):
star = SelectField(
label="星級",
validators=[DataRequired("請選擇星際")],
description="星級",
coerce=int,
choices=[(1, "1星"), (2, "2星"), (3, "3星"), (4, "4星"), (5, "5星")],
render_kw={"class": "form-control"})