Ваши решения кажутся немного хакерскими. Ваша проблема не только в дополнениях, но и в изданиях. Что происходит, когда ваш пользователь редактирует строку, введенные данные отправляются непосредственно на ваш «слой данных» даже до того, как пользователь фиксирует свою редакцию?
Лучшим решением было бы ограничить роль вашего sourceModel. Вместо того, чтобы быть «прямым» представлением ваших данных, оно должно быть «буферизованным» представлением этих данных. Когда sourceModel создан, вы делаете копию своих данных в некотором виде экземпляров Row (). SourceModel, имея свою собственную копию данных, может свободно воспроизводить, выполнять редакции и добавления и фиксировать данные только на уровне модели, когда пользователь вносит свои изменения.
Если вам нужен пример такой таблицы на PyQt, вы можете посмотреть на источник моего проекта:
http://hg.hardcoded.net/moneyguru/
Возможно, вам придется покопаться, чтобы действительно найти логику "буферизации", потому что она не в самом коде PyQt, а скорее в кроссплатформенной части кода:
http://hg.hardcoded.net/moneyguru/src/tip/core/gui/table.py
Эта логика затем используется в моем подклассе QAbstractItemModel:
http://hg.hardcoded.net/moneyguru/src/tip/qt/controller/table.py