Найти - Пользователи
Полная версия: QSqlTableModel и Sqlalchemy
Начало » Python для новичков » QSqlTableModel и Sqlalchemy
1
axinax
Для заполнения форм из базы данных я использовал sqlalchemy ORM и переопределенную QAbstractTableModel отсюда Combobox у меня заполняется данными из базы данных, но в консоли постоянно пишет ошибку TypeError: PyQt4.QtCore.QVariant represents a mapped type and cannot be instantiated, которая возникает в этом методе класса модели:
     def data(self, index, role=Qt.DisplayRole):
        if not index.isValid():
            return QVariant()
        elif role not in (Qt.DisplayRole, Qt.EditRole):
            return QVariant()
        row = self.results[index.row()]
        name = self.fields[index.column()][2]
        return getattr(row, name) 
в строке elif.
Что это и как с этим бороться?
Rodegast
> Что это и как с этим бороться?

Не возвращать QVariant. Это же очевидно.
axinax
Не возвращать QVariant.
А как? Я не могу найти, где устанвливаются Qt.DisplayRole. Запрос по документации Qt выдает в основном ссылки на этот самый метод data где один из параметров - role.
Я до конца не могу понять механизм этих ролей. Где, кем и как определяется будет ли дисплей роль или эдит роль или другая?
Методом тыка пытался добавить в список исключений UserRole - не помогло
Rodegast
Там всё очень просто. Qt запрашивает данные у модели через метод data, а для чего он их использует передаётся через параметр role и в зависимости от этого параметра нужно отдавать разные данные:
 def data(self, idx, role=QtCore.Qt.DisplayRole):
	if idx.isValid():
		if role == QtCore.Qt.DisplayRole:
			return u"Текст для отображения на экране"
		elif role == QtCore.Qt.FontRole:
                         return QtGui.QFont( ... )
		elif role == QtCore.Qt.ToolTipRole:
                         return u"Текст для подсказки"

Список ролей смотри в документации http://doc.qt.io/qt-4.8/qt.html#ItemDataRole-enum
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB