Как отфильтровать QSqlRelationaltableModel с помощью PyQt?

У меня есть следующий код на основе документации PyQt:

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

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


person Moayyad Yaghi    schedule 10.09.2013    source источник


Ответы (1)


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

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

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

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

    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) указывают на одну и ту же таблицу, но у них есть две разные модели, каждая со своим фильтром.

person doublebyte    schedule 03.01.2014