1

次のように定義されたフィールドを持つモデルがあります

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

ただし、 decimal_places=6 は内部精度のみを目的としています。管理フィールドに表示されるのは 2 つの decimal_places のみです。それで、プロパティで何かできるのではないかと思いました。ただし、プロパティは管理者インターフェースのフィールドとして表示されません。例: データベース レコード: 100.256754 管理編集フィールドの表示: 100.26

これを行う方法はありますか?

4

2 に答える 2

5

私は 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_pp

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

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

admin.site.register(MyModel, MyModelAdmin)

HTH。

于 2009-12-31T00:59:49.280 に答える
1

フィールドの値を表示するだけで編集可能にしたくない場合は、カスタム テンプレートまたは JavaScript を使用して値をマスクまたは変更できます。

ただし、データを見ている人から残りの数字を隠すという知恵に疑問を呈する必要があります。値を非表示にすると、そのようなフィールドを編集する人が完全な値が何であるかがわからないため、これは作成中の災害のようなにおいがします. ユーザー側からそれを本当に気にしないのなら、なぜそのように保存するのですか。

于 2009-12-31T00:37:26.807 に答える