Django 如何将modeladmin额外表单字段添加到只读字段?
在Django 如何将modeladmin额外表单字段添加到只读字段?,django,admin,Django,Admin,在ModelAdmin的readonly\u字段中添加额外的表单字段时,打开模型实例的管理页面时,出现配置不正确的错误: TaskClosedAdmin.readonly_fields[0], 'extra_admin_field' is not a callable or an attribute of 'TaskClosedAdmin' or found in the model 'TaskClosed'. 如何将额外字段添加到只读字段 编辑 我还尝试了TaskClosedAdmin的ge
ModelAdmin
的readonly\u字段中添加额外的表单字段时,打开模型实例的管理页面时,出现配置不正确的错误:
TaskClosedAdmin.readonly_fields[0], 'extra_admin_field' is not a callable or an attribute of 'TaskClosedAdmin' or found in the model 'TaskClosed'.
如何将额外字段添加到只读字段
编辑
我还尝试了TaskClosedAdmin
的get_form()
,认为字段可能会在super(TaskClosedAdmin,self)之后更新。get_form(request,obj,**kwargs)
:
我仍然会收到关于extra\u admin\u字段
不存在的相同错误。。。我在哪里可以添加它
models.py
管理员
您需要做的是编写一个只读小部件,并直接在表单上指定它,如下所示:
from ... import ReadOnlyWidget
class TaskForm(forms.ModelForm):
extra_admin_field = forms.CharField(max_length=10)
class Meta:
model = Task
widgets = {
'extra_admin_field': ReadOnlyWidget,
}
def __init__(self, *args, **kwargs):
super(TaskForm, self).__init__(*args, **kwargs)
# set extra_admin_field value
这里有一个只读小部件应该可以工作(我还没有尝试过):因为ModelAdmin有一个readonly_fields属性,我想Django中已经存在类似的东西了。我只想将我的额外字段添加到此只读字段。好的,你说得对,额外的管理员字段是表单字段,而不是模型字段,因此我无法将其添加到模型管理员只读字段。
class Task(models.Model):
# some fields
class TaskToConfirm(Task):
class Meta:
proxy = True
class TaskForm(forms.ModelForm):
extra_admin_field = forms.CharField(max_length=10)
class Meta:
model = Task
def __init__(self, *args, **kwargs):
super(TaskForm, self).__init__(*args, **kwargs)
# set extra_admin_field value
class TaskAdmin(admin.ModelAdmin):
form = TaskForm
class TaskClosedAdmin(TaskAdmin):
readonly_fields = ('extra_admin_field',)
from ... import ReadOnlyWidget
class TaskForm(forms.ModelForm):
extra_admin_field = forms.CharField(max_length=10)
class Meta:
model = Task
widgets = {
'extra_admin_field': ReadOnlyWidget,
}
def __init__(self, *args, **kwargs):
super(TaskForm, self).__init__(*args, **kwargs)
# set extra_admin_field value