我有一个python wtforms QuerySelectField,它从无序数据库中提取数据。如何使列表按字母顺序显示?
答案 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)