2011-12-18 24 views
0

フィールドを読み取り専用としてModelAdminフォームに表示するので、readonly_fields属性に追加しました。読み取り専用フォームフィールドの書式

しかし、フィールドには通貨が格納されているため、整数として格納されているため、いいフォーマットを適用したいと考えています。 __init__メソッドで書式設定を適用しようとすると、私はModelAdminのカスタムModelFormを作成しました。

問題は、私は値を見つけることができません。このフィールドはself.fields属性には存在しません。

誰でもreadonly_fieldsの値がどこに保持されているか知っていますか?

答えて

2

ただ、何かのように:すべての種類のフォームのために働く

class MyAdmin(admin.ModelAdmin): 
    readonly_fields = ('foo',) 

    def foo(self, obj): 
     return '${0}'.format(obj.amount) 
+0

私が始めたときに似たようなことを試したと思っていましたが、おそらく何かを打ち砕いて、もっと複雑な解決策を探していました。 とにかく、私が必要としていたもの。ありがとうございました。 – Krachtwerk

3

代替アプローチ、読み取り専用フィールドを表すためのウィジェットを作成することです。ここに私が自分のために書いたものがあります。独自の要件に合わせて<span %s>%s</span>を変更することができます。追加したことをしたら

from django import forms 
from django.utils.safestring import mark_safe 
from django.utils.encoding import force_unicode 


class ReadOnlyWidget(forms.TextInput): 
    def render(self, name, value, attrs=None): 
     if value is None: 
      value = '' 
     final_attrs = self.build_attrs(attrs, type=self.input_type, name=name) 
     if value != '': 
      # Only add the 'value' attribute if a value is non-empty. 
      final_attrs['value'] = force_unicode(self._format_value(value)) 
     return mark_safe(u'<span%s />%s</span>' % (flatatt(final_attrs),value)) 

、単純に次の操作を行います。

class MyAdmin(admin.ModelAdmin): 
    foo = models.TextField(widget=ReadOnlyWidget(attrs={'class':'read-only'} 
          initial="$50") 

は、その後、あなたのCSSで、 read-onlyクラスのいくつかのスタイリングを行う、またはそれに応じて属性を調整することができます。

関連する問題