2016-06-12 34 views
0

私のモデルに正しくマップされたフォームがあります。私がしたいのは、3つのSelectField(日、月、年)を使用してユーザに生年月日を入力させ、それらの3つの値の組み合わせをmodel.dateOfBirthに書き込ませることです。私は既存のDateFieldDateTimeFieldオプションを知っていますが、いずれも適切ではありません。Flask-WTFormを使用して複数のWTFormフィールドを1つの属性にマップする

私はFormFieldを使用して、これをしようとしましたが、私はもちろん、存在しないmodel.dateOfBirth.dayを設定しようとしていると仮定して、フォーム全体'str' object has no attribute 'day'populate_objを呼び出すとき、それは失敗します。

私はform.dataからすべての関連データを引き出し、populate_objの外でモデル化するために書くが、私は失敗からpopulate_objを停止するdateOfBirthデータを削除するように見えることはできませんすることができます。フォーム作成時に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) 

答えて

0

これには関数を書くことができます。

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 

ここでこの関数を呼び出すことができます。 私はこの機能をまだテストしていません。エラーが表示されたり、クエリがある場合は、私に教えてください。

関連する問題