Удалить дубликаты из 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)