使用Django Admin中的属性

时间:2009-12-31 00:04:28

标签: django models admin decimal

我有一个模型,字段定义为

p = models.DecimalField(max_digits=12, decimal_places=6)

但decimal_places = 6仅用于内部精度。我只想在管理字段中显示2个decimal_places。所以我想也许我可以用属性做点什么。但属性不会显示为Admin界面中的字段。例如:数据库记录:100.256754 管理员编辑字段显示:100.26

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:3)

我正在使用wlashell - 您的编辑表单应显示原始值;否则,每次修改对象时,您都会间接修改该值,即使实际字段根本没有更改。可能不是你想要的。

如果您只想更改字段在更改列表中的显示方式(可能为了可读性),您可以在模型类上定义一个方法,如下所示:

from django.db import models
from django.template.defaultfilters import floatformat

class MyModel(models.Model):
    p = models.DecimalField(max_digits=12, decimal_places=6, verbose_name='My Field Name')
    ...

    def display_p(self):
        """Format `p` to 2 decimal places, for readability."""
        return floatformat(self.p, 2)
    display_p.short_description = 'My Field Name'
    display_p.admin_order_field = 'p'

然后,在您的ModelAdmin子类list_display中,您将包含display_p而不是p

from django.contrib import admin
from myapp.models import MyModel

class MyModelAdmin(admin.ModelAdmin):
    list_display = ['display_p', ...]
    ...

admin.site.register(MyModel, MyModelAdmin)

HTH。

答案 1 :(得分:1)

如果您只想显示字段的值但不能使其可编辑,您可以使用自定义模板或某些javascript来屏蔽/更改值。

我必须质疑智慧,隐藏查看数据的人的剩余数字。这就像一个人在编辑像这样的字段时会发生一场灾难,如果你隐藏这些值就不会知道完整的值是什么。如果您真的不关心用户方面,那么为什么要以这种方式存储它。