如何制作Django管理员readonly textarea字段

时间:2015-10-28 15:01:40

标签: django django-admin

在Django管理员中,如果我有一个&#39; sa TextField的模型字段并使用readonly_fields将其设置为只读,那么它在<p>中显示为文本} tag。

我希望它仍然显示为textarea字段,但设置了disabled属性。

实现这一目标的最简单方法是什么?

3 个答案:

答案 0 :(得分:5)

使用表单字段

   somefield = forms.CharField(
       widget=forms.TextInput(attrs={'readonly':'readonly'})
    )

答案 1 :(得分:0)

readonly_fields可以使用方法名称和字段名称。您可以编写一个方法,在禁用的textarea中呈现字段的值。

请务必从模型管理员中排除该字段,因为它不再位于readonly_fields中。

答案 2 :(得分:0)

很抱歉无法提供最新的答案,但这是一个想法(受@cinoch的回答和this answer启发),可以用最少的代码为我解决问题:

  1. 请勿将您的TextField名称添加到readonly_fields子类的ModelAdmin中(否则,步骤2对此无效)

  2. 相反,执行将以下内容添加到您的ModelAdmin子类中:

    formfield_overrides = {models.TextField: dict(widget=Textarea(attrs=dict(readonly=True)))}

请注意,您将必须首先导入Textarea类: from django.forms import Textarea

TextField现在将以可滚动的Textarea而不是纯文本的形式显示在管理页面上,并且根据需要,其内容现在将变为只读。

缺点是这适用于模型中的所有TextFields。如果有问题,您可能应该使用自定义格式as suggested by @cinoch,并在herehere中进行详细说明。