对于这个特定的管理页面,我想将“当前值”(在红色圆圈中概述)转换为返回此特定对象的管理页面的链接。
但是我无法找到去做这个改变的地方。我知道我需要以某种方式覆盖这个 显示但我无法理解。
我需要覆盖什么来做我想做的事?
管理模型定义:
class FirmwareConfigElementsChoiceInline(admin.TabularInline):
model = FirmwareConfigElements
extra = 1
class FirmwareConfigAdmin(admin.ModelAdmin):
save_as = True
list_display = ('name', 'description')
inlines = [FirmwareConfigElementsChoiceInline]
使用Filip的帮助我已经达到了这个目的:
class FirmwareConfigElementsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
klass = FirmwareConfigElementsForm
super(klass, self).__init__(*args, **kwargs)
if self.instance.type == 'incfw':
value = self.instance.value
url = '#' # TODO: get the URL for the value
hyperlink = '<a href="%s">%s</a>' % (url, value)
label = self.fields['type'].label.replace(value, hyperlink)
self.fields['type'].label = label
但在上面的代码中,self.fields['type'].label
的内容为Type
,而不是我期待的Include another FW Config - BASE:IBM-HS22/HS22V
。
我在调试器中对它进行了探讨,但我无法弄清楚如何找到我想要更改的特定标签。
答案 0 :(得分:1)
内联管理模型可以使用template property来提供自定义模板。从那里,您需要修改代码以添加网址。
答案 1 :(得分:1)
您需要为ModelForm
模型提供自定义FirmwareConfigElements
,您将其设置为FirmwareConfigElementsChoiceInline.form
类属性的值。
在这里,您需要覆盖ModelForm.__init__()
实例方法,以便在表单绑定时为要覆盖的字段分配新标签:
class FirmwareConfigElementsForm(models.ModelForm):
def __init__(self, *args, **kwargs):
klass = FirmwareConfigElementsForm
super(klass, self).__init__(*args, **kwargs)
if form.is_bound and 'value' in self.data:
value = self.data['value']
url = '' # TODO: get the URL for the value
hyperlink = '<a href="%s">%s</a>' % (url, value)
label = self.fields['type'].label.replace(value, hyperlink)
self.fields['type'].label = label
class FirmwareConfigElementsChoiceInline(admin.TabularInline):
model = FirmwareConfigElements
extra = 1
form = FirmwareConfigElementsForm
现在,如果您希望标签随着用户更改表单数据而动态更改,那么它会变得更加丑陋,您将不得不诉诸referencing JavaScript media并在运行中执行上述操作。