Форум сайта python.su
Здравствуйте. Пишу свою модель которая наследуется от QSqlQueryModel т.к. необходимо организовать удаление строки из базы данных. Но сама функция удаления либо не удаляет выбранную строку, либо удаляет но всегда последнюю. Подскажите где в ней ошибка.
class NewSqlModel(QSqlQueryModel): def __init__(self, parent=None): super(NewSqlModel, self).__init__() def flags(self, index): """Предопределим флаги для дальнейшего их редактирования в модели""" f1 = QSqlQueryModel.flags(self, index) if index.column() == 0: f1 |= Qt.ItemIsEditable return f1 def setData(self, index, value, role=Qt.EditRole): """Метод для обновления данных""" self.data = QSqlQueryModel.data(self, index, role) if index.isValid(): self.data(index.row(), value) self.dataChanged.emit(index, index, role) return True return False # Функция с ошибкой def removeRows(self, position, index, parent=QModelIndex()): """Производим удаление выбранной строки""" self.beginRemoveRows(parent, position, position + index - 1) self.query = QSqlQuery('DELETE FROM calculation WHERE id = %d' % position) self.endRemoveRows() return True
def connect_column_calc(self): """Подключаем модель к БД и производим запрос к ней""" self.calculation_model = NewSqlModel() self.calculation_model.setQuery('SELECT id, number_invoice, inv_date, company_name, ' '(all_sum / 100.0) AS all_sum, signatory FROM calculation') def del_pushbutton(self): """Функция удаляет выделенную строку из БД. Запускается через кнопку""" if self.inv_tabView.selectionModel().hasSelection(): for index in self.inv_tabView.selectedIndexes() or []: print('Удаляется строка %d...' % index.row()) self.start_menu.model().removeRows(index.row(), index.row()) else: QMessageBox.warning(None, 'Ошибка удаления', 'Строки для удаления отсутствуют! \n' 'Выделите строку и повторите удаление.')
Офлайн