Django - Как отобразить научную нотацию в поле страницы администратора? - PullRequest
4 голосов
/ 02 августа 2011

На моей странице администратора есть поле, которое я хотел бы отобразить в научной нотации.

Прямо сейчас это показывает что-то ужасное, как это. Как я могу отобразить это как 4.08E + 13?

enter image description here

Сейчас я использую стандартное десятичное поле в модели.

Любой совет с благодарностью.

Я на Джанго 1.2.

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

Вы должны использовать% e, чтобы использовать научную нотацию

пример:

>>> num = 374.534  
>>> print '%e' % num
3.745340e+02
1 голос
/ 03 августа 2011

Хорошо, вот обходной путь, так как я не могу понять, как сделать это в коде Python Django.У меня есть страницы администратора, запускающие пользовательский JavaScript для выполнения преобразования после загрузки страницы.

Подробности:

Создайте этот файл JavaScript с именем "decimal_to_sci_not.js" ипоместите его в свой медиа-каталог:

/*
Finds and converts decimal fields > N into scientific notation.
*/

THRESHOLD = 100000;
PRECISION = 3;

function convert(val) {
    // ex. 100000 -> 1.00e+5
    return parseFloat(val).toPrecision(PRECISION);
}

function convert_input_fields() {
    var f_inputs = django.jQuery('input');
    f_inputs.each(function (index, domEl) {
        var jEl = django.jQuery(this);
        var old_val = parseFloat(jEl.val());
        if (old_val >= THRESHOLD) {
           jEl.val(convert(old_val));
        }
    });
}

function convert_table_cells() {
    //Look through all td elements and replace the first n.n number found inside
    //if greater than or equal to THRESHOLD
    var cells = django.jQuery('td');
    var re_num = /\d+\.\d+/m; //match any numbers w decimal
    cells.each(function (index, domEl) {
        var jEl = django.jQuery(this);
        var old_val_str = jEl.html().match(re_num);
        var old_val = parseFloat(old_val_str);
        if (old_val >= THRESHOLD) {
           jEl.html(jEl.html().replace(old_val_str,convert(old_val)));
        }
    });
}

django.jQuery(document).ready( function () {
    convert_input_fields();
    convert_table_cells();
});

Затем обновите классы кода admin.py, включив в него файл javascript:

class MyModel1Admin(admin.ModelAdmin):

    class Media:
        js = ['/media/decimal_to_sci_not.js']

admin.site.register(MyModel1,MyModel1Admin)
...