2014-06-05 40 views
1

是子類化QSqlRelationalTableModel。Reimplimenting QSqlRelationalTableModel - 數據函數返回字符串不是代碼

class Titles(QSqlRelationalTableModel): 
    def __init__(self): 
     QSqlRelationalTableModel.__init__(self) 

     self.setTable("titles") 
     self.setRelation(self.fieldIndex("type"), QSqlRelation("title_type", "id", "type"))   
     self.select() 

     print self.record(0).value("title").toString() # 1 

    def data(self, i, role): 
     if role == Qt.DisplayRole: 
      print self.record(0).value("title").toString() # 2 
      return self.record(0).value("title").toString() # 3 

titles = Titles() 

print iswcTitlesModel.record(0).value("title").toString() # 4 

所有上述打印空間(它返回正確的行量,但只作爲空白空間)。 如果數據功能被刪除,#1 &#4打印。 如果返回「string」,則所有項目都被填充。該模型被實例化,並且預期的返回代碼在模型定義之外工作。嘗試了多個其他的SQL表,都與一個關係,但即使沒有關係,它不起作用。任何人都可以看到發生了什麼問題?

回答

0

在:

def data(self, i, role): 
     if role == Qt.DisplayRole: 
      if i.column() == 1: 
       return QVariant("col 1 custom data") 
      else: 
       return super(QSqlTableModel, self).data(i, role) 

所以,如果i.column() ==所需的列,顯示任何你想要的。否則,返回超類(QSqlTableModel)已經映射到模型中的數據。

0

嘗試使用關係中的域

self.setRelation(self.fieldIndex("type"), QSqlRelation("title_type", "title_type"."id", "title_type"."type"))   

過類似的問題,爲"id"是找到了答案兩個表

+0

嗨ngulam,感謝您的答覆。該解決方案沒有任何區別,但在Python 2.7中。即使沒有關係,數據仍然不會返回,所以它似乎更多爲什麼self.record(0).value(「title」)。toString()不工作(它返回,但只有空白),但返回「字符串」確實有效。問候 – user2422819