I have a QTableView
populated by QSqlRelationalTableModel
.
There is a column that references another table, so when I edit/create a row, this column's editor is QCombobox
which gets its data from the related table. The problem is that I want to filter the data with some predefined WHERE close on the related table.
Example:
Tables:
Person:
id, name, job_id;
Job:
id, title, salary
What I want is something like
model.setRelation(3,QSqlRelation("Job", "id", "title", "WHERE salary > 50000"))
So that the QCombobox will have only Job titles with salaries > 5000.
I cannot use QSqlQueryModel
as suggested in SO question - I still need users to be able to add new data or edit existing data.
It seems that someone managed to achieve this 10 years ago by tweaking the QT source code, but my C++ is bad so I could not figure it out quite well.
Possible solutions:
-
The first thing that comes to mind is to implement my own
QSqlRelationalDelagate
and populateQCombobox
in thecreateEditor
and set appropriate values insetModelData
. I will try to do it myself and report the results back here. But it seems not very clean to me. -
The best way would be to Extend the functionality of the
QSqlRelation
orQSqlRelationalTableModel
but the documentation on it seems to be not very clear. So the real question is for experienced QT/PyQT developers: How do I solve the problem this way?
from Filter options provided by QSqlRelationalDelegate/QSqlRelation acourding to some WHERE close
No comments:
Post a Comment