如何从 wtforms QuerySelectField 中删除重复项

How to remove duplicatates from wtforms QuerySelectField

在我的 Flask 表单中,我想要一个下拉列表,其中包含唯一的 items.Depending 选项,用于筛选哪些项目将出现在第二个下拉列表中(为此使用 javascript)。

我有一个数据库 table 是这样的:

Category Sub-category Type
Application Can't log in Incident
Application Error Incident
Application Install Request
Application Remove Incident
Database Optimise Request
Database Corrupt Incident

等等。因此在类别列中有多个同名条目。 当前,当我使用此填充 QuerySelectField 时:

category = QuerySelectField(label='Category',
                               query_factory=lambda: Classification.query.filter_by(selectable=True),
                               allow_blank=True,
                               get_label='category', id='category', blank_text=u'Select a category...'
                                )

我得到了“类别”列中所有内容的列表。但我只想列出每一项。我该怎么做?

我想使用 SelectField 而不是 QuerySelectField,但不知道如何动态创建选择[]。

如果其他人有相同的用例,我想出了如何做到这一点。

我改变了这个:

category = QuerySelectField(label='Category',
                               query_factory=lambda: Classification.query.filter_by(selectable=True),
                               allow_blank=True,
                               get_label='category', id='category', blank_text=u'Select a category...'
                                )

对此:

category = QuerySelectField(label='Category',
                            query_factory=lambda: Classification.query.filter_by(selectable=True).distinct(Classification.category),
                            allow_blank=True,
                            get_label='category',
                            id = 'category',
                            blank_text = u'Select a category...'
                            )

诀窍是添加 distinct(column you need to be distinct) 部分。就我而言 distinct(Classification.category)