2009-12-31 131 views
0

使用屬性我有域的模型定義爲在Django管理

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

但decimal_places = 6是僅用於內部的精度。我只想要2個decimal_places顯示在管理員字段中。所以我想也許我可以做一些屬性。但是,屬性不會顯示爲Admin界面中的字段。例如:數據庫記錄:100.256754 admin編輯字段顯示:100.26

有沒有辦法做到這一點?

回答

1

如果您只想顯示該字段的值,但不能使其可編輯,則可以使用自定義模板或一些javascript來屏蔽/更改該值。

我不得不質疑智慧,雖然隱藏從查看數據的人的其餘數字。在編輯這樣的字段時,這種氣味就像一場災難,如果你隱藏了價值觀,就不知道它的全部價值是什麼。如果你真的不關心用戶方面的情況,爲什麼要以這種方式存儲它。

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。

+0

不顯示剩餘數字的原因是該字段包含6位小數精度的財務數據,但人們僅用於處理2位數的準確性。 – Henri 2010-01-01 12:23:47

+0

在更改列表中顯示數據到2位小數是有意義的;我只是反對在變更表格中這樣做。 – elo80ka 2010-01-01 13:14:09

+0

我明白你的觀點。然而,許多需要處理這些數據的人會開始詢問爲什麼數字用6位小數代替2代表。如果您有興趣,我的信息來源是: http://speleotrove.com/decimal/ decifaq.html http://speleotrove.com/decimal/decifaq1.html http://speleotrove.com/decimal/decifaq2.html#precision – Henri 2010-01-02 00:01:34