[英]Map multiple WTForm fields to one attribute using Flask-WTForm
我有一個可以正確映射到我的模型的表格。 我想要做的是讓用戶使用三個SelectField
(天,月,年)輸入他們的出生日期,並將這三個值的組合寫入我的model.dateOfBirth
。 我知道現有的DateField
和DateTimeField
選項,但是它們都不適合。
我嘗試使用FormField
嘗試此操作,但是當我在整個model.dateOfBirth.day
'str' object has no attribute 'day'
上調用populate_obj
時,它會失敗,並假設它試圖設置model.dateOfBirth.day
當然不存在。
我可以從form.data
提取所有相關數據,然后將其寫入populate_obj
之外的模型中,但是我似乎無法刪除dateOfBirth
數據來阻止populate_obj
失敗。 當然,還有其他問題,關於如何在創建表單時傳遞obj
時如何預填充表單數據,但我現在願意為此而犧牲。
我看過使用FieldList
,但是文檔說它將所有數據都返回列表中,而不是字典,這仍然會給我同樣的問題
class DOBForm(Form):
day = SelectField(u'Please enter your date of birth',
choices=days,
validators=[InputRequired(message=u' ')]
)
month = SelectField(u' ',
choices=months,
validators=[InputRequired(message=u' ')]
)
year = SelectField(u' ',
choices=years,
validators=[InputRequired(message=u' ')]
)
和
class MainForm(Form):
dateOfBirth = FormField(DOBForm)
class Model
dateOfBirth = db.Column('dateOfBirth', Date)
您可以為此編寫一個函數。
from datetime import datetime
def date_of_birth(**kwargs):
day = kwargs['day']
month = kwargs['month']
year = kwargs['year']
strip="-"
seq = (day,month,year)
date = datetime.strptime(strip.join(seq) , '%d-%m-%Y')
birthday = stringDate.strftime('%d-%m-%Y')
dob = Model()
dob.dateOfBirth = birthday
session = Session()
session.add(dob)
session.commit()
retval = row2dict(dob)
session.close()
return retval
現在您可以調用此函數。 我尚未測試此功能。 如果您遇到任何錯誤或有任何疑問,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.