У меня возникла проблема с установкой значений по умолчанию для FieldForm в WTForms.WTForm FormField заполняет значения
models.py
class RepairCategory(db.Model): name = ... class Repair(db.Model): price = .. category_id [FK] = ... product_id [FK] class Product(db.Model): name = ... description = ... color = ...
ProductBase содержит только атрибуты, которые соответствуют дб Модель продукта.
forms.py
class NewRepair(Form):
#this is okay - it get's populated
repair_category = QuerySelectField("Repair category",
query_factory=get_categories)
price = DecimalField()
class ProductBase(Form):
name = StringField("Name ", validators=[DataRequired(), Length(1, 64)])
color = StringField("Color ", validators=[DataRequired(), Length(1, 64)])
description = TextAreaField("Description")
active = BooleanField()
class Product(Form):
base_product = FormField(ProductBase)
add_repairs = FormField(NewRepair)
submit = SubmitField('Submit')
The add_repairs содержит форму, которую я хочу использовать в целях создания ремонта. Base_product - это форма, в которой, в идеале, я хочу передать obj = product в представлениях, поэтому значения по умолчанию заселяются автоматически. Я также хочу использовать form.populate_obj(), как раз в форме base_product.
вот как я создаю форму продукта в виде:
def make_product_form(form=None, product=None, **kwargs):
form = form()
form.base_product.obj = product
return form
А потом, при обращении с постами, я хочу сделать:
def product(id):
product = Product.query.get_or_404(id)
form = make_product_form(form=Product,product=product)
if form.validate_on_submit():
product_form = form.base_product
product_form.populate_obj(product)
Однако base_form от вида продукта, не заполняется значениями по умолчанию из существующего объекта.
Любые предложения о том, как достичь этого? Спасибо :)
Разве ваша функция 'make_product_form' не выдает исключение 'AttributeError'? В вашем классе 'ProductBase' нет атрибута' obj', поэтому строка 'form.base_product.obj = product' не должна работать. Вы также не отправляли код для класса EditProduct. – kchomski