У меня есть форма, которую я должен проверить, а затем сохранить данные в базе данных. У меня есть модель SQLAlchemy
под названием Campaign
, которая выглядит примерно так
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
code in 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)
Теперь приведенный выше код глуп, потому что мне нужно жестко закодировать каждое имя поля в представлении. Есть ли другой способ заполнить поля моей модели полями формы? Спасибо