Skip to content

QuerySelectField's query_factory callable not used when assigned through model_form's field_args #30

Open
@bglogic

Description

@bglogic

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):

  1. Printing field_args in the conv_ManyToOne method shows that query_factory points to <function ModelConverterBase.convert.<locals>.<lambda> at 0x1076a3b80>.
  2. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions