从 QuerySelectField 中删除重复项

Remove duplicates from QuerySelectField

我 运行 遇到以下问题,我想知道这是否可能。

我有一个 flask-admin adminview 设置,有一个额外的表单字段,它显示了一个基于 sql 模型中特定列(类别)的下拉列表。请参阅代码进行说明:

型号:

class Item(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(128), index = True)
    category = db.Column(db.String(16))

我在 Flask-Admin 中有如下额外的表单字段:

    form_extra_fields = {
    'category': QuerySelectField(
        label='Categories',
        query_factory = lambda: db.session.query(Item),
        get_label = 'category',
        )
    }

这一切都很好,除非类别列中有重复项,然后下拉列表会填充这些重复值。是否可以从下拉列表中删除这些重复项,或者至少只显示唯一值?

基本上我通过重写 QuerySelectField class 中的 class 方法解决了这个问题,如下所示,通过将唯一标签附加到列表并检查下一个标签是否在该列表中。我仍然认为应该有更好的方法...

def iter_choices(self):
    labels = []     
    if self.allow_blank:           
        yield ('__None', self.blank_text, self.data is None)        

    for pk, obj in self._get_object_list():      

    if self.get_label(obj) not in labels:                        

        labels.append(self.get_label(obj))                
        yield (pk, self.get_label(obj), obj == self.data)