1. 程式人生 > >Flask下拉列表與資料庫同步問題解決記錄

Flask下拉列表與資料庫同步問題解決記錄

剛開始 我的表單是這麼寫的

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"})