Что касается пользовательских полей, вы, вероятно, уже нашли соответствующую часть в документации Django .
Вопрос о том, стоит ли создавать пользовательское поле (или пользовательский тип базы данных, см. Ниже), зависит от того, что вам нужно делать с сохраненными числами. Для хранения и некоторых случайных перемещений вы можете использовать самое простое и вменяемое решение (ваш номер два, дополненный Tobit).
С PostgreSQL у вас есть возможность реализовать пользовательские типы непосредственно в базе данных, включая операторы . Вот соответствующая часть в Документах Postgres , в комплекте с примером комплексных чисел, не меньше.
Конечно, тогда вам нужно представить новый тип и операторы Django. Довольно много работы, но тогда вы можете выполнять арифметику с отдельными полями прямо в базе данных, используя Django ORM.
Я думаю, что проблема состоит в том, что пустой TransferHandler на самом деле препятствует тому, чтобы события DnD произошли. Существует образец здесь, который может быть релевантным.
http://www.java2s.com/Code/Java/Swing-JFC/ExtendedDnDDragandDropDemo.htm
Не похоже на использование TransferHandler правильно. Попытайтесь прочитать учебное руководство здесь.
См. документ TransferHandler здесь. Пустой конструктор не похож, он предназначен для использования вне подкласса TransferHandler.
И Вы не реализуете ни одной функциональности, обеспеченной в стандартном TransferHandler, обеспеченном на компонентах Swing. Посмотрите отрывок из учебного руководства DnD здесь (мой полужирный):
Примечание: При установке пользовательского TransferHandler на компонент Swing поддержка по умолчанию заменяется. Например, при замене TransferHandler JTextField тем, который обрабатывает цвета только, Вы отключите его способность поддерживать импорт и экспорт текста. Если необходимо заменить TransferHandler по умолчанию — например, тот, который обрабатывает текст — необходимо будет повторно реализовать текстовый импорт и экспортировать способность. Это не должно быть столь же обширно как что обеспечивает Swing — это могло быть столь же просто как поддержка разновидности данных StringFlavor, в зависимости от потребностей Вашего приложения.
У меня была такая же проблема, это не имеет ничего общего с вашей собственной реализацией TransferHandler. Когда вы заменяете TransferHandler, вам также необходимо удерживать DragSource по умолчанию и указать ему распознавать жест перетаскивания. Вам также может потребоваться реализовать свой собственный Transferable, потому что вам нужно будет передать его методу DragGestureEvent.startDrag ().
table.setTransferHandler(new MyTransferHandler());
table.setDragEnabled(true);
DragSource source = DragSource.getDefaultDragSource();
source.createDefaultDragGestureRecognizer(table, DnDConstants.ACTION_COPY, new DragGestureListener() {
@Override
public void dragGestureRecognized(DragGestureEvent dge) {
//grab the selected files from the table model
ArrayList<File> files = new ArrayList<File>();
for (int row : table.getSelectedRows()) {
files.add((File) dm.getValueAt(row, 1));
}
//FileTransferable is a custom Transferable implementation
Transferable transferable = new FileTransferable(files);
//and this is the magic right here
dge.startDrag(null,transferable);
}
});