2011-12-18 82 views
0

我想在ModelAdmin表單中顯示只讀字段,所以我將其添加到readonly_fields屬性中。只讀表格字段格式化

但是,由於該字段包含一個貨幣,存儲爲一個整數,我想要應用一些很好的格式。我爲我的ModelAdmin創建了一個自定義ModelForm,試圖在重寫的__init__方法中應用格式。

問題是,我找不到價值。該字段不存在於self.fields屬性中。

有沒有人知道readonly_fields的值保留在哪裏,還是有更好/不同的方法?

回答

2

就做這樣的事情:

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

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

我以爲自己嘗試過類似的東西時,我開始了,但我可能搞砸了一些東西,並從那裏尋找越來越複雜的解決方案。 無論如何,正是我所需要的。謝謝。 – Krachtwerk 2011-12-18 12:51:06

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類,或者你可以調整相應的屬性。