簡體   English   中英

使用Flask-WTForm將多個WTForm字段映射到一個屬性

[英]Map multiple WTForm fields to one attribute using Flask-WTForm

我有一個可以正確映射到我的模型的表格。 我想要做的是讓用戶使用三個SelectField (天,月,年)輸入他們的出生日期,並將這三個值的組合寫入我的model.dateOfBirth 我知道現有的DateFieldDateTimeField選項,但是它們都不適合。

我嘗試使用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.

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