2016-04-05 10 views
0

QSqlRelation ile çalışan bir QSqlRelationalTableModel kurulumunda başka bir tabloya harika çalışıyorum. Şimdi, ilgili tabloda ilgili satır için ek sütun aramak istiyorum. Bunu nasıl başarabilirim?QSqlRelationalTableModel ile ilgili diğer sütunlar

Örnek tabloları:

city ('id', 'name', 'state_id') 
state ('id', 'name', 'capital') 

Ne var bugüne kadar: Ne sermaye arama istiyorum Şimdi

| 1 | 'San Francisco' | 'California' | 

:

model = QtSql.QSqlRelationalTableModel() 
model.setTable('city') 
model.setRelation(2, QtSql.QSqlRelation("state", "id", "name")) 
model.select() 

bana böyle bir satır verecek Hangi devlet modelinde, şehir masasından. Bunu nasıl yaparım? Benim setRelation anlayışım, kimliği X sütununda main_table öğesinden alması ve bunu eşlenen sütunla değiştirmesidir, ancak durum tablosunu değiştirmek istemiyorum. Ben QSqlRecord ve QSqlRelation içine baktım, ama bir şey eksik gibi görünüyor.

Teşekkürler! Görüntülemek istediğiniz tabloda yabancı anahtarlarınız varsa

cevap

1

QSqlRelationalTableModel yararlıdır. Sizin durumunuzda capital, city tablosunun bir sütun değil.

İstediğiniz sütunları almak için iki tabloyu bir QSqlQueryModel ve JOIN kullanmalısınız. Böyle bir şey Yapmam arıyorum ne yapacağını bulundu en iyi yolu QSqlRelationalTableModel kullanmak ve selectStatement geçersiz kılmak için

model = QtSql.QSqlQueryModel() 
model.setQuery("SELECT city.id, city.name, state.name, state.capital FROM city " 
       "INNER JOIN state ON city.state_id = state.id"); 
model.select() 
+0

Bu durumdan korkuyordum. Ne yazık ki bu QSqlQueryModel salt okunur olarak benim için çalışmaz ve benim uygulama düzenlenebilir bir model için (ancak sermaye değil). Sorguyu, QSqlRelationalTableModel öğesinin hala ayarlanmış olduğu gibi çalışacak şekilde geçersiz kılmak mümkün olabilir mi? –

0

çalışmalıdır.

Başarısız denemeler: Ek sütunları ile

Aşırı yük setRelation: bu verileri gösterirken birini kullanıyorsanız

model.setRelation(2, QtSql.QSqlRelation("state", "id", "name, capital")) 

, bu QSqlRelationalDelegate kırar.

Ayrıca, ilişki modelinde arama yapmak için bir yöntem ekledim, ancak selectStatement() yaklaşımından daha kötü bir çözüm gibi görünüyordu.

def getStateForRow(self, row): 
    # The state is col 2 
    stateModel=self.relationModel(2) 
    return stateModel.match(stateModel.index(0,1), QtCore.Qt.DisplayRole, self.record(row).value(2), flags = QtCore.Qt.MatchExactly)[0] 

Ben de @ pnezis tavsiyesine başına QSqlQueryModel içine baktı, ama ... docs

QSqlQueryModel sınıf SQL sonuç kümeleri için salt okunur veri modelini sağlar diyor

Ama bana doğru yönde işaret etti. Teşekkürler