Удалить дубликаты из QuerySelectField - PullRequest
0 голосов
/ 21 декабря 2018

У меня возникли проблемы со следующим, и мне интересно, возможно ли это вообще.

У меня есть настройка adminview на flashk-admin, с дополнительным полем формы, которое показывает раскрывающийся список, основанный наопределенный столбец (категория) в модели 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 Ответ

0 голосов
/ 24 декабря 2018

В основном я решил эту проблему, переопределив метод класса в классе 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) 
...