【发布时间】:2020-06-25 10:50:19
【问题描述】:
我有一个 QTableView 的表单有一个添加新记录的按钮。记录出现,但我输入的任何数据都没有保存。事实上,一旦我添加了一条记录,就不会保存对 tableview 的任何编辑。只要不添加新记录,我就可以就地编辑。底层数据库是 Postgresql。
问题是,如何添加可以立即编辑的新记录?我在下面的代码中缺少什么?
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtSql import *
from PyQt5.QtWidgets import *
from phones import *
app=QApplication(sys.argv)
QTableView
QSqlTableModel
class Main(QMainWindow):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.cont_id = '9'
self.populate_phones()
self.ui.new_phone.clicked.connect(self.add_phone)
def populate_phones(self):
self.phone_model = QSqlTableModel(self)
self.phone_model.setTable("contact_phones")
self.phone_model.setFilter("contact_id='{0}'".format(self.cont_id))
self.phone_model.select()
self.phone_view = self.ui.phone_view
self.phone_view.setModel(self.phone_model)
self.phone_view.resizeColumnsToContents()
def add_phone(self):
self.phone_model.setEditStrategy(QSqlTableModel.OnManualSubmit)
row = self.phone_model.rowCount()
record = self.phone_model.record()
record.setGenerated('id', False) #primary key
record.setValue('contact_id', self.cont_id) #foreign key
self.phone_model.insertRecord(row, record)
submit = self.phone_model.submitAll()
#self.phone_model.select()
phone_index_edit = QModelIndex(self.phone_model.index(row, self.phone_model.fieldIndex('phone_number')))
self.ui.phone_view.edit(phone_index_edit)
if __name__=="__main__":
db = QSqlDatabase.addDatabase("QPSQL");
db.setHostName(server)
db.setDatabaseName(database)
db.setUserName(user)
db.setPassword(pword)
myapp = Main()
myapp.show()
sys.exit(app.exec_())
【问题讨论】:
标签: python postgresql pyqt5 qt5 pyside2