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

6 投票
2 回答
6225 浏览
提问于 2025-04-16 22:43

我在我的管理页面上有一个字段,我想把它显示成科学计数法。

现在它显示得很难看,比如这样。 我怎么才能把它显示成4.08E+13呢?

在这里输入图片描述

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

任何建议都非常感谢。

我使用的是Django 1.2。

2 个回答

4

你需要使用 %e 来获取科学计数法的格式:

基本示例:

x = 374.534  
print("%e" % x)
# 3.745340e+02

精度为2

x = 374.534
print("{0:.2E}".format(x))
# 3.75E+02

x = 12345678901234567890.534
print("{0:.2E}".format(x))
# 1.23E+19

精度为3

print("{0:.3E}".format(x))
# 1.235E+19
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)

撰写回答