在Django管理员中,如果我有一个' sa TextField
的模型字段并使用readonly_fields
将其设置为只读,那么它在<p>
中显示为文本} tag。
我希望它仍然显示为textarea
字段,但设置了disabled
属性。
实现这一目标的最简单方法是什么?
答案 0 :(得分:5)
使用表单字段
somefield = forms.CharField(
widget=forms.TextInput(attrs={'readonly':'readonly'})
)
答案 1 :(得分:0)
readonly_fields
可以使用方法名称和字段名称。您可以编写一个方法,在禁用的textarea中呈现字段的值。
请务必从模型管理员中排除该字段,因为它不再位于readonly_fields
中。
答案 2 :(得分:0)
很抱歉无法提供最新的答案,但这是一个想法(受@cinoch的回答和this answer启发),可以用最少的代码为我解决问题:
请勿将您的TextField
名称添加到readonly_fields
子类的ModelAdmin
中(否则,步骤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,并在here或here中进行详细说明。