我想以ModelAdmin
形式将字段显示为只读,因此我将其添加到readonly_fields
属性中。
但是,由于该字段包含一个存储为整数的货币,我想应用一些不错的格式。我为ModelForm
创建了一个自定义ModelAdmin
,尝试在重写的__init__
方法中应用格式。
self.fields
属性中。
有谁知道保留readonly_fields
的值的位置,还是有更好/不同的方法?
答案 0 :(得分:2)
做一些像:
class MyAdmin(admin.ModelAdmin):
readonly_fields = ('foo',)
def foo(self, obj):
return '${0}'.format(obj.amount)
答案 1 :(得分:1)
另一个更合适的解决方案可在Django 2.1.2中使用:
如果查看contents
方法,则ModelAdmin通过特殊包装器 AdminReadonlyField (django / contrib / admin / helpers.py)呈现只读字段,我们可以看到 代码
if getattr(widget, 'read_only', False):
return widget.render(field, value)
这意味着如果小部件具有read_only
值的True
属性
那么只读字段将调用小部件的render方法。
因此,您可以使用render方法设置值的格式。
例如:
class CustomDateInput(widgets.DateInput):
read_only = True
def _render(self, template_name, context, renderer=None):
return 'you value'
class CustomForm(forms.ModelForm):
some_field = forms.DateTimeField(widget=CustomDateInput())
@admin.register(SomeModel)
class SomeModelAdmin(admin.ModelAdmin):
form = CustomForm
readonly_fields = ['some_field']