只读表单字段格式

时间:2011-12-18 02:26:18

标签: django forms admin

我想以ModelAdmin形式将字段显示为只读,因此我将其添加到readonly_fields属性中。

但是,由于该字段包含一个存储为整数的货币,我想应用一些不错的格式。我为ModelForm创建了一个自定义ModelAdmin,尝试在重写的__init__方法中应用格式。

问题是,我找不到价值。该字段不在self.fields属性中。

有谁知道保留readonly_fields的值的位置,还是有更好/不同的方法?

2 个答案:

答案 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']