Я пишу много шаблонного кода, чтобы попытаться сохранить данные моей формы.В других языках мне не приходилось вручную связывать атрибут формы с моделью перед сохранением. Мне интересно, есть ли у python / flask аналогичный подход?В идеале я бы предпочел вручную сопоставить все мои поля формы, чтобы просто сохранить запись в БД.
[править] Чтобы было ясно, этот подход хорошо работает для меня, записи сохраняются должным образом, однако это кажется неэффективным.В другом фрагменте кода я смог использовать библиотеку wtf {{ wtf.quick_form(form) }}
для создания формы в формате html без явного перечисления всех ее полей.Учитывая, что у меня есть те же имена для моих атрибутов модели, что и для атрибутов формы, мне было интересно, могу ли я сделать то же самое?[править]
Любой отзыв
Пример ниже ..
У меня большая модель "product"
class Product(db.Model):
field1 = db.Column(db.String(200))
field2 = db.Column(db.String(200))
....
field30 = db.Column(db.String(200))
Она представлена в виде колбынапример,
class ProductForm(FlaskForm):
field1 = StringField('Field 1', validators=[DataRequired()])
field2 = TextAreaField('Field 2 Label')
field30 = TextAreaField('Field 30 Label')
submit = SubmitField('Submit')
Здесь я пытаюсь отобразить и сохранить запись о продукте ...
def save_product(self, product, form):
product.field1 = form.field.data
#lots more tedious form to model mapping
db.session.add(product)
# commit the data to the database
db.session.commit()
В моем маршрутах. у меня есть следующее.Я вижу, как это называется, и запись действительно сохраняется.
def crud():
form = CrudForm()
if form.validate_on_submit():
product = Product()
product.save_product(product, form, new=True)
flash(_('Product Saved'))
return redirect(url_for('main.index'))
return render_template('crud.html', title=_('Product CRUD'),
form=form)