我有一个表单,我必须对其进行验证,然后将数据保存在数据库中。我有一个名为 Campaign
的 SQLAlchemy
模型,它看起来像这样
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Campaign(db.Model):
__tablename__ = 'campaigns'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
priority = db.Column(db.SmallInteger)
starts_at = db.Column(db.Date)
ends_at = db.Column(db.Date)
.... bla bla bla
现在我有一个用于验证的 WTForm
表单
from flask.ext.wtf import Form, TextField, IntegerField, DateField, Required, NumberRange
class CampaignForm(Form):
def date_validation(form, field):
#some validation on date
name = TextField(validators=[Required()])
priority = IntegerField(validators=[Required(), NumberRange(min=1,max=100)])
start_date = DateField(validators=[Required(), date_validation])
end_date = DateField(validators=[Required(), date_validation])
... bla bla bla
现在要验证和保存表单数据,我可以做这样的事情是我的 View
Flask 中的代码
class CampaignsView(MethodView):
def post(self):
"""
For creating a new campaign
"""
form = CampaignForm(request.form)
if form.validate():
campaign = Campaign(form.name.data, form.priority.data, and so on )
session.add(campaign)
现在上面的代码很愚蠢,因为我必须对 View 中的每个字段名称进行硬编码。有没有其他方法可以用表单字段填充我的模型字段? 谢谢
最佳答案
您可以像这样使用 .populate_obj 方法:
if form.validate_on_submit():
campaign = Campaign()
form.populate_obj(campaign)
另请查看 docs对此。
关于python - 使用 WTForms 进行表单验证,并使用 Flask 中的表单数据自动填充 SQLAlchemy 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14478830/