Django - 如何在管理页面字段上显示科学记数法?

时间:2011-08-02 13:53:40

标签: python django django-models django-admin django-forms

我的管理页面中有一个字段,我想用科学记谱法显示。

现在它显示出像这样丑陋的东西。如何将其显示为4.08E + 13?

enter image description here

现在我在模型中使用标准的十进制字段。

非常感谢任何建议。

我在使用Django 1.2。

2 个答案:

答案 0 :(得分:3)

您必须使用%e来使用科学记数法

示例:

>>> num = 374.534  
>>> print '%e' % num
3.745340e+02

答案 1 :(得分:1)

嗯,这是一个解决方法,因为我无法弄清楚如何在Django Python代码中执行此操作。我有管理页面运行一些自定义的JavaScript来加载页面后进行转换。

<强>详细信息:

创建名为“decimal_to_sci_not.js”的javascript文件并将其放在媒体目录中:

/*
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)