Я пытаюсь сделать следующее в PyQt4, используя SQLAlchemy в качестве бэкэнда для модели для QListView.
Моя первая версия выглядела так:
class Model(QAbstractListModel):
def __init__(self, parent=None, *args):
super(Model, self).__init__(parent, *args)
def data(self, index, role):
if not index.isValid():
return None
if role == QtCore.Qt.DisplayRole:
d = sqlmodel.q.get(index.row()+1)
if d:
return d.data
return None
Проблема заключалась в том, что, как только я начинаю удалять строки, идентификаторы перестают быть последовательными.
Итак, мое текущее решение выглядит так:
class Model(QAbstractListModel):
def __init__(self, parent=None, *args):
super(Model, self).__init__(parent, *args)
def data(self, index, role):
if not index.isValid():
return None
if role == QtCore.Qt.DisplayRole:
dives = Dive.q.all()
if index.row() >= len(dives) or index.row() < 0:
return None
return dives[index.row()].location
Но я полагаю, что таким образом у меня могут возникнуть проблемы с выбором правильной записи из базы данных позже.
Есть какой-нибудь элегантный способ сделать это?
Моей первой идеей было бы вернуть максимальный идентификатор из базы данных как row_count, а затем заполнить несуществующие строки фиктивными данными и скрыть их в представлении. Поскольку приложению, в большинстве случаев, придется обрабатывать что-то около 10 тыс., И это уже очень маловероятно, я думаю, что это может быть осуществимо.