Background
In the example below, assuming parent is a many-to-one field that maps to a QuerySelectField, The query_factory's callable (get_all_except_first) will not be used, it just returns all records of the model. On the other hand, using a normal form works as expected.
def get_all_except_first():
return Example.query.filter(Example.id != 1)
# This doesn't work
ExampleForm = model_form(
Example,
field_args={
"parent": {"query_factory": get_all_except_first}
...
}
...
)
# This works
class ExampleForm(FlaskForm):
parent = QuerySelectField(query_factory=get_all_except_first)
...
Failed debugging attempts
Got confused when attempting to debug code similar to the example above (using model_form):
- Printing
field_args in the conv_ManyToOne method shows that query_factory points to <function ModelConverterBase.convert.<locals>.<lambda> at 0x1076a3b80>.
- Using the debugger to inspect
field_args in the conv_ManyToOne method shows that it doesn't contain query_factory
https://github.com/wtforms/wtforms-sqlalchemy/blob/9884ab82ffd51a14dc2778468d428985d4c8e26b/wtforms_sqlalchemy/orm.py#L232-L234
Background
In the example below, assuming
parentis a many-to-one field that maps to aQuerySelectField, Thequery_factory's callable (get_all_except_first) will not be used, it just returns all records of the model. On the other hand, using a normal form works as expected.Failed debugging attempts
Got confused when attempting to debug code similar to the example above (using
model_form):field_argsin theconv_ManyToOnemethod shows thatquery_factorypoints to<function ModelConverterBase.convert.<locals>.<lambda> at 0x1076a3b80>.field_argsin theconv_ManyToOnemethod shows that it doesn't containquery_factoryhttps://github.com/wtforms/wtforms-sqlalchemy/blob/9884ab82ffd51a14dc2778468d428985d4c8e26b/wtforms_sqlalchemy/orm.py#L232-L234