Beispiel #1
0
    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)
Beispiel #2
0
 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
Beispiel #3
0
    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))
Beispiel #4
0
 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
Beispiel #6
0
 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
Beispiel #7
0
 def getConnectionId(self):
     query = self.query('SELECT CONNECTION_ID();')
     return forceRef(query.record().value(0)) if query.first() else None