7

100.34 EUR のように、お金を表す複数の DecimalField を持つ複数のモデルがあります。

私の目標は、この画像に示すように、管理リスト ビューに通貨を表示することでした。

http://i.imgur.com/XKEQFp9.png

しかし、私はすべてのお金の分野でそれを行う方法を見つけることができませんでした.

DecimalField から継承し、 Unicode表現を変更してカスタム MoneyField を作成しようとしましたが、うまくいきませんでした。

https://github.com/jakewins/django-moneyも試しましたが、うまくいきませんでした。

django admin のソース コードを調査したところ、最終的に問題が見つかりました。

django.admin.contrib.admin.util.py の display_for_field 関数で、値が DecimalField のインスタンスであるかどうかをチェックします。その場合は、10 進数のように表示されます。

elif isinstance(field, models.DecimalField):
    return formats.number_format(value, field.decimal_places) 

理にかなっていますが、管理画面で EUR 記号/テキストを表示できません。

どうすればこの問題を解決できますか?

書式設定された値を文字列として表示する各フィールドのメソッドを単純に使用できることはわかっていますが、より DRYer な方法があるかどうかを知りたいと思いました。

4

3 に答える 3

9

ModelAdmin管理者リストに表示するために、各値をフォーマットするために呼び出されるカスタム関数をクラスで作成できます。

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('formatted_amount', ...other fields...,)

    def formatted_amount(self, obj):
        # obj is the Model instance

        # If your locale is properly set, try also:
        # locale.currency(obj.amount, grouping=True)
        return '%.2f EUR' % obj.amount
于 2013-09-12T12:05:19.617 に答える