Проблема в том что QStandardItemModel хранит данные для этих двух ролей в одной и той же памяти.
C++ (Qt)
model->setData(1, Qt::EditRole);
model->setData("one", Qt::DisplayRole);
qDebug() << model->data(Qt::EditRole); // "one"
model->setData("one", Qt::DisplayRole);
model->setData(1, Qt::EditRole);
qDebug() << model->data(Qt::DisplayRole); // 1
остаётся только хранить данные под Qt::EditRole, и переопределять data для Qt::DisplayRole.
И меня уже в принципе это устраивает)