如何在 QuerySelectField 中排序下拉列表

How to order dropdown list in QuerySelectField

我有一个 python wtforms QuerySelectField,它从无序数据库中提取数据。如何使列表按字母顺序显示?

对该字段使用的查询应用排序。给定一个模型,例如

class Car(Base):
    ...
    make = Column(Unicode, nullable=False)
    model = Column(Unicode, nullable=False)

您将传递一个生成有序结果的 query or a query factory

def cars():
    return session.query(Car).order_by(Car.make, Car.model)

class Cars(Form):
    car = QuerySelectField(query_factory=cars)

或者,如果不使用工厂,您可以在视图中动态设置查询:

form.car.query = session.query(Car).order_by(Car.make, Car.model)

如果您的模型缺少描述性字符串表示,您可以自定义渲染选项时使用的标签,以便顺序更加明显:

def get_car_label(car):
    return f"{car.make} {car.model}"

class Cars(Form):
    car = QuerySelectField(query_factory=cars, get_label=get_car_label)