如何在QuerySelectField中订购下拉列表

时间:2018-06-03 21:44:27

标签: python sqlalchemy wtforms

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

1 个答案:

答案 0 :(得分:1)

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

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)