使用屬性我有域的模型定義爲在Django管理
p = models.DecimalField(max_digits=12, decimal_places=6)
但decimal_places = 6是僅用於內部的精度。我只想要2個decimal_places顯示在管理員字段中。所以我想也許我可以做一些屬性。但是,屬性不會顯示爲Admin界面中的字段。例如:數據庫記錄:100.256754 admin編輯字段顯示:100.26
有沒有辦法做到這一點?
使用屬性我有域的模型定義爲在Django管理
p = models.DecimalField(max_digits=12, decimal_places=6)
但decimal_places = 6是僅用於內部的精度。我只想要2個decimal_places顯示在管理員字段中。所以我想也許我可以做一些屬性。但是,屬性不會顯示爲Admin界面中的字段。例如:數據庫記錄:100.256754 admin編輯字段顯示:100.26
有沒有辦法做到這一點?
如果您只想顯示該字段的值,但不能使其可編輯,則可以使用自定義模板或一些javascript來屏蔽/更改該值。
我不得不質疑智慧,雖然隱藏從查看數據的人的其餘數字。在編輯這樣的字段時,這種氣味就像一場災難,如果你隱藏了價值觀,就不知道它的全部價值是什麼。如果你真的不關心用戶方面的情況,爲什麼要以這種方式存儲它。
我與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。
不顯示剩餘數字的原因是該字段包含6位小數精度的財務數據,但人們僅用於處理2位數的準確性。 – Henri 2010-01-01 12:23:47
在更改列表中顯示數據到2位小數是有意義的;我只是反對在變更表格中這樣做。 – elo80ka 2010-01-01 13:14:09
我明白你的觀點。然而,許多需要處理這些數據的人會開始詢問爲什麼數字用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