def setEditorData(self, editor, value, record): masterId = forceRef(record.value(self._primaryKey)) subRecord = self._getSubRecord(masterId) # Если полученное из модели значение пустое if not value.isValid(): # то попытаться вытянуть его из базы value = subRecord.value(self._subCol.fieldName()) self._subCol.setEditorData(editor, value, subRecord)
def resolveValueByCaches(value, rules): for cache, fieldName in rules: itemId = forceRef(value) if not itemId: return CCol.invalid record = cache.get(itemId) if not record: return CCol.invalid value = record.value(fieldName) return value if value else CCol.invalid
def saveExternalData(self, rowRecord): masterId = forceRef(rowRecord.value(self._primaryKey)) value = rowRecord.value(self._surrogateFieldName) subRecord = self._getSubRecord(masterId) subRecord.setValue(self._subCol.fieldName(), value) subRecord.setValue(self._subTableForeignKey, QtCore.QVariant(masterId)) subRecordId = QtGui.qApp.db.insertOrUpdate(self._subTable, subRecord) subRecord.setValue(self._subTable.idField(), QtCore.QVariant(subRecordId))
def getValues(self, values): if values[0] is None: return [CCol.invalid] * len(values) for cache in self._caches: itemId = forceRef(values[0]) record = cache.get(itemId) if not record: return [CCol.invalid] * len(values) else: values = [record.value(idx) for idx in xrange(record.count())] return values
def toString(self, val, record): for cache in self._caches: itemId = forceRef(val) record = cache.get(itemId) if not record: return toVariant('') else: val = record.value(0) # На случай, когда нет ссылки на id в следующей таблицы цепочки # Но для текущей таблицы указаны резервные поля (нужно для полей вида freeInput) if val.isNull() and record.count() > 1: for fieldIdx in xrange(1, record.count()): val = record.value(fieldIdx) if not val.isNull(): return toVariant(val) return val
def getRelativeValues(self, values): masterId = forceRef(values[0]) if callable(self._alternativeValuesGetter): values = self._alternativeValuesGetter(masterId) else: if not self._cache.has_key(masterId): subRecord = QtGui.qApp.db.getRecordEx(table=self._subTable, cols='*', where=[self._subTable[self._subTableForeignKey].eq(masterId)] + self._subTableCond, order=u'%s DESC' % self._subTable.idField()) if not subRecord: subRecord = QtGui.qApp.db.record(self._subTable.name()) subValues = [subRecord.value(fieldName) for fieldName in self._subCol.fields()] self._cache[masterId] = subValues values = self._cache[masterId] return values
def getConnectionId(self): query = self.query('SELECT CONNECTION_ID();') return forceRef(query.record().value(0)) if query.first() else None