簡體   English   中英

將自定義對象傳遞給WTForm

[英]Pass custom object to WTForm

我需要將一個對象從數據庫傳遞到表單,然后從中讀取默認值。 我當前的代碼如下所示:

我的初始化:

form = EditEventForm(event)

而我的形式課:

class EditEventForm(FlaskForm):
    def __init__(self, event):
        self.event = event

    name = StringField('Name', validators=[DataRequired()],     default=self.event.name)
    description = TextAreaField('Description', validators=[DataRequired()], default=self.event.description)
    street = StringField('Street and number', validators=[DataRequired()], default=self.event.street)
    city = StringField('City', validators=[DataRequired()], default=self.event.city)
    time = StringField('Time', validators=[DataRequired()], default=self.event.time)

但是顯然,表單無法訪問自身上下文。 我還有另一種方法可以實現它,以便我的字段可以從傳遞的對象中讀取數據嗎?

如果您的任務只是使用默認數據填充表單,則可以執行以下操作:

from flask_wtf import Form
from wtforms import StringField, TextAreaField
from wtforms.validators import DataRequired

class EditEventForm(Form):
    name = StringField('Name', validators=[DataRequired()])
    description = TextAreaField('Description', validators=[DataRequired()])
    street = StringField('Street and number', validators=[DataRequired()])
    city = StringField('City', validators=[DataRequired()])
    time = StringField('Time', validators=[DataRequired()])

然后使用所需數據填充新創建的表單

form = EditEventForm()
form.name.data = event.name
form.description.data = event.description
form.street.data = event.street
form.city.data = event.city
form.time.data = event.time

編輯

正如評論中所建議的那樣,上述模式是不好的,因為更改模型或表單對象時,必須跟蹤所有表單創建實例。 可以這樣使用某種東西:

# attributes of the event object matching form field names will be used for field values
form = EditEventForm(obj=event)

# populates the attributes of the passed obj with data from the form’s fields
form.populate_obj(event)

文檔中

注意:這是破壞性操作; 與字段同名的任何屬性都將被覆蓋。 請謹慎使用。

FineManual中

init (formdata = None,obj = None,prefix ='',data = None,meta = None,** kwargs)參數:
(...)obj –如果formdata為空或未提供,則檢查此對象的屬性是否與表單字段名稱匹配,這些屬性將用於字段值。

暫無
暫無

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

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