我想在ModelAdmin
表單中顯示只讀字段,所以我將其添加到readonly_fields
屬性中。只讀表格字段格式化
但是,由於該字段包含一個貨幣,存儲爲一個整數,我想要應用一些很好的格式。我爲我的ModelAdmin
創建了一個自定義ModelForm
,試圖在重寫的__init__
方法中應用格式。
問題是,我找不到價值。該字段不存在於self.fields
屬性中。
有沒有人知道readonly_fields
的值保留在哪裏,還是有更好/不同的方法?
我想在ModelAdmin
表單中顯示只讀字段,所以我將其添加到readonly_fields
屬性中。只讀表格字段格式化
但是,由於該字段包含一個貨幣,存儲爲一個整數,我想要應用一些很好的格式。我爲我的ModelAdmin
創建了一個自定義ModelForm
,試圖在重寫的__init__
方法中應用格式。
問題是,我找不到價值。該字段不存在於self.fields
屬性中。
有沒有人知道readonly_fields
的值保留在哪裏,還是有更好/不同的方法?
就做這樣的事情:
class MyAdmin(admin.ModelAdmin):
readonly_fields = ('foo',)
def foo(self, obj):
return '${0}'.format(obj.amount)
的另一種方法,它適用於所有類型的形式是創建一個小部件來表示只讀域。這是我爲自己使用而寫的一個。您可以更改<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
類,或者你可以調整相應的屬性。
我以爲自己嘗試過類似的東西時,我開始了,但我可能搞砸了一些東西,並從那裏尋找越來越複雜的解決方案。 無論如何,正是我所需要的。謝謝。 – Krachtwerk 2011-12-18 12:51:06