2013-09-10 1 views
0

Я имею следующий код ниже на основе документации PyQt:Как фильтровать QSqlRelationaltableModel с PyQt?

model = QSqlRelationalTableModel() 
    model.setTable("employee") 
    model.setRelation(2, QSqlRelation("city", "id", "name")) 
    model.setRelation(3, QSqlRelation("country", "id", "name")) 

Третья линия будет приносить все города в связи. Как я могу фильтровать отношение, а не сама модель? Например, я хотел бы, чтобы города имели имя («X»).

ответ

1

Вы должны фильтровать модель, на которую ссылается отношение, но вы можете ссылаться на нее напрямую; в вашем случае:

model.relationModel(2).setFilter("city like 'x'"); 

AFAIK, фильтр влияет на «копию» таблицы (модель), который был реализованным в этом отношении, и это не влияет на другие экземпляры той же таблицы.

На самом деле, вы могли бы иметь что-то вроде этого:

model.setRelation(2, QSqlRelation("city", "id", "name")) 
    model.setRelation(4, QSqlRelation("city", "id", "name")) 

    model.relationModel(2).setFilter("city like 'x'"); 
    model.relationModel(4).setFilter("city like 'y'"); 

соотношение (2) и (4) указывают на ту же таблицу, но у них есть две разные модели, каждая из которых имеет свой собственный фильтр.