У меня есть две таблицы SQLite, имеющие следующую структуру:
CREATE TABLE "log" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" TEXT,
"value" INTEGER NOT NULL,
"category_id" INTEGER NOT NULL,
"date" TEXT NOT NULL,
FOREIGN KEY("category_id") REFERENCES "category"("id")
);
CREATE TABLE "category" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"category_name" TEXT NOT NULL,
"type" TEXT NOT NULL
);
Я также хочу отобразить QTableView
, который использует QSqlRelationalTableModel
. Мне нужно отобразить два столбца (category_name
и type
) вместо category_id
, хотя QSqlRelation , кажется, заменяет внешний ключ только одним столбцом, мне удалось показать 2 столбца, как это:
self.balance_table_model = QSqlRelationalTableModel()
self.balance_table_model.setTable("log")
self.balance_table_model.setRelation(3, QSqlRelation("category", "id", "category_name, type"))
self.balance_table_model.setHeaderData(1, Qt.Horizontal, "Name")
self.balance_table_model.setHeaderData(2, Qt.Horizontal, "Value")
self.balance_table_model.setHeaderData(3, Qt.Horizontal, "Category")
self.balance_table_model.setHeaderData(4, Qt.Horizontal, "Type")
self.balance_table_model.setHeaderData(5, Qt.Horizontal, "Date")
self._ui.balanceTableView.setModel(self.balance_table_model)
self._ui.balanceTableView.setColumnHidden(0, True)
Теперь, когда я хочу добавить новую строку, вставка работает, только если я соединяю две таблицы без типа, например
self.balance_table_model.setRelation(3, QSqlRelation("category", "id", "category_name"))
Код вставки:
record = self.balance_table_model.record()
record.setGenerated(0, True)
record.setValue(1, log_name)
record.setValue(2, log_value)
record.setValue(3, category_id)
record.setValue(4, date)
self.balance_table_model.insertRecord(-1, record)
Как сделать так, чтобы вставка работала, при этом отображая столбец type
?