Удалить дубликаты из QuerySelectField

Я сталкиваюсь с проблемами со следующим, и мне интересно, если это вообще возможно.

У меня есть настройка 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',
        )
    }

Это все работает нормально, за исключением случаев, когда в столбце категории есть дубликаты, а затем в раскрывающемся списке находятся эти дубликаты значений. Можно ли удалить эти дубликаты из выпадающего списка или хотя бы показать только уникальные значения?

1 ответ

Решение

По сути, я решил эту проблему, переопределив метод класса в классе QuerySelectField следующим образом, добавив уникальные метки в список и проверив, присутствует ли каждая следующая метка в этом списке. Я все еще думаю, что должен быть лучший способ, хотя...

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) 
Другие вопросы по тегам